标签: jakarta-mail

如何配置用于JavaMail的邮件服务器?

我正在尝试使用以下代码:

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;   // important
import javax.mail.event.*;      // important
import java.net.*;
import java.util.*;

public class servletmail extends HttpServlet {
    public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out=response.getWriter();
        response.setContentType("text/html");
        try {
            Properties props=new Properties();
            props.put("mail.smtp.host","localhost");   //  'localhost' for testing
            Session   session1  =  Session.getDefaultInstance(props,null);
            String s1 = request.getParameter("text1"); //sender (from)
            String s2 = request.getParameter("text2");
            String s3 = request.getParameter("text3");
            String s4 = request.getParameter("area1");
            Message message =new MimeMessage(session1);
            message.setFrom(new InternetAddress(s1));
            message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(s2,false));
            message.setSubject(s3);
            message.setText(s4); …
Run Code Online (Sandbox Code Playgroud)

java email servlets jakarta-mail

16
推荐指数
1
解决办法
5万
查看次数

使用Gmail的JavaMail:535-5.7.1不接受用户名和密码

当我尝试使用JavaMail API发送邮件时收到此错误.我确信用户名和密码是100%正确的.我正在连接的Gmail帐户是一个旧帐户,因为他们说它需要时间来处理新帐户.

DEBUG SMTP RCVD: 535-5.7.1 Username and Password not accepted. Learn more at

535 5.7.1 http://mail.google.com/support/bin/answer.py?answer=14257 x35sm3011668
wfh.6

javax.mail.SendFailedException: Sending failed;
  nested exception is:
        javax.mail.AuthenticationFailedException
        at javax.mail.Transport.send0(Transport.java:218)
        at javax.mail.Transport.send(Transport.java:80)
        at Main.(Main.java:41)
        at Main.main(Main.java:51)

这是我的代码:

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;

public class Main
{
    String  d_email = "abc@gmail.com",
            d_password = "pass",
            d_host = "smtp.gmail.com",
            d_port  = "465",
            m_to = "abc@gmail.com",
            m_subject = "Testing",
            m_text = "testing email.";

    public Main()
    {
        Properties props = new Properties();
        props.put("mail.smtp.user", d_email);
        props.put("mail.smtp.host", d_host); …

java jakarta-mail

16
推荐指数
4
解决办法
6万
查看次数

Session类中的getDefaultInstance()和getInstance()有什么区别?

Session.getDefaultInstance(props, authenticator)和之间有什么区别getInstance(props, authenticator)?一般来说,你何时会选择一个而不是另一个?

我还在getDefaultInstance(props,authenticator)上阅读了Java doc ,但仍然无法清楚地/清楚地看出差异.

希望专家可以帮助我更好地理解这一点.

更新:触发提出这个问题的实际原因是:我们在Session.getDefaultInstance()基于Web的应用程序中的某些地方使用了方法.有时,它会抛出java.lang.SecurityException: Access to default session denied,快速谷歌搜索,它建议使用Session.getInstance()方法代替.因此,当一个人选择一个而不是另一个?

java session jakarta-mail

16
推荐指数
2
解决办法
3万
查看次数

将javamail会话传输保持打开是否可以接受?

我的应用程序需要临时发送电子邮件.我正在使用javamail的getDefaultSession和getTransport来发送消息,并且它都按预期工作.

但是我注意到发送可能需要很长时间 - 每次发送最多7秒.如果我打破了这些步骤,就像这样:

Transport transport = session.getTransport("smtp");
transport.connect();
transport.sendMessage( msg, addresses )
transport.close();
Run Code Online (Sandbox Code Playgroud)

...我可以看到,每次都是几乎所有时间的connect()调用.

我发现的所有例子都是这样做的 - 获得传输,连接,发送,断开连接.但当然,它们都是单拍的例子,或者只需一次通话即可发送大批电子邮件.

我以为我可以让连接保持打开状态,如下所示:

Transport transport = session.getTransport("smtp");
if (!transport.isConnected())
    transport.connect();
transport.sendMessage( msg, addresses )
Run Code Online (Sandbox Code Playgroud)

(这里有一个变种,这里:java邮件保持传输对象连接).

我最终必须在某种关闭钩子中关闭它.而且我可能必须有一个后备(如果连接丢失但传输没有实现).但有没有理由不在应用程序生命周期内将其保持开放状态?

谢谢,阿拉斯泰尔

java jakarta-mail

16
推荐指数
1
解决办法
9957
查看次数

如何更改JavaMail端口

我正在使用JavaMail编写一个小型Java应用程序,向用户发送自动电子邮件.他们可以选择(现在)两个端口:25和587.可以通过GUI上的单选按钮选择端口.

我添加了一个测试按钮,允许用户测试电子邮件设置(包括端口).但是,由于某种原因,一旦用户尝试发送测试电子邮件,端口就无法更改.Javamail将始终使用原始测试电子邮件的端口.

示例:用户尝试在端口25上发送电子邮件,JavaMail表示无法在端口25上连接(例如,SMTP主机使用另一个端口).用户单击端口587,并尝试发送新电子邮件.JavaMail抛出一个错误,说它无法再次在端口25上连接.

我有点难过为什么.每次发送新的测试电子邮件时,都会创建一个全新的SendMailUsingAuthentication对象.在该类中,属性始终重置为正确的端口.每当我调试时,据我所知,所有变量都是正确的,并与正确的端口相关联.我错过了运输内部的东西吗?

在前端GUI中:

private void testButtonActionPerformed(java.awt.event.ActionEvent evt) {                                           

    int port = port25RadioButton.isSelected() ? PORT_25 : PORT_587;
    notifier = new SendMailUsingAuthentication(hostNameTextField.getText(),
            userTextField.getText(), getPassword(), emailTextField.getText().split(","),port);


    Thread wait = new Thread(new Runnable() {

        public void run() {
            try {
                changeStatusText("Sending test email...");
                notifier.postTestMail();
                changeStatusText("Test email sent.");
            } catch (AddressException ex) {
                changeStatusText("Error.  Invalid email address name.");
            } catch (MessagingException ex) {
                changeStatusText("SMTP host connection refused.");
                System.err.println(ex.getMessage());
            } catch (Exception ex) {
                System.err.println(ex);
            }
        }
    });

    wait.start();
}
Run Code Online (Sandbox Code Playgroud)

在电子邮件发件人类中:

public void postTestMail() …
Run Code Online (Sandbox Code Playgroud)

java email smtp jakarta-mail

16
推荐指数
2
解决办法
4万
查看次数

使用XOauth的android中的Javamail api

我需要通过我的应用程序发送电子邮件,javamail API如果说(任何其他邮件服务,如果可用的话也会).问题是我不想问用户他usernamepassword.

1)是否有可能使用OAuth 2.0JavaMail API/任何其他邮件API

2)如何获取OAuth令牌?

3)网上是否有可用的示例代码

提前致谢.

PS:我从未使用过邮件服务/ SMTP请求.

android jakarta-mail oauth-2.0

16
推荐指数
1
解决办法
1万
查看次数

亚马逊简单电子邮件服务(SES) - 我应该使用SMTP接口还是SES API?

我是Amazon SES的新手,我发现有两种方法可以通过编程方式发送电子邮件:

  1. SES API(http://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email-api.html)
  2. SES SMTP接口(http://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-using-smtp-java.html)

每种方法的优缺点是什么?它们似乎可以互换,但我想听听那些有过SES经验的人.

根据我自己的要求,我将向用户发送交易电子邮件(即收据,帐户确认等)和通知电子邮件(即"您有新消息",状态更改等)我的网络和移动应用程序.如果可能的话,我想保留所有这些外发电子邮件的历史记录.

email smtp jakarta-mail amazon-web-services amazon-ses

16
推荐指数
4
解决办法
8276
查看次数

无法使用SMTP发送电子邮件(获取javax.mail.MessagingException:无法将套接字转换为TLS;)

我编写了以下代码,用于通过SMTP作为TLS使用javamail API发送电子邮件,因为不支持SSL,但我最终遇到以下异常.请参阅下面的代码.我使用过调试模式,在代码下面你也可以找到异常.

import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SendMailTLS {

    public static void main(String[] args) {

        final String username = "---------@mydomain.com";
        final String password = "***********";

        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", "mail.mydomain.com");
        props.put("mail.smtp.debug", "true");
        props.put("mail.smtp.port", "587");

        Session session = Session.getInstance(props,
          new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
          });
        session.setDebug(true);

        try {

            Message message = new MimeMessage(session);
            message.setFrom(new 
                  InternetAddress("---------@mydomain.com")); …
Run Code Online (Sandbox Code Playgroud)

java ssl smtp jakarta-mail

15
推荐指数
2
解决办法
7万
查看次数

Session.getInstance的Java Mail问题

我在尝试使用java邮件时收到以下异常;

java.lang.NoClassDefFoundError: com/sun/mail/util/MailLogger
    at javax.mail.Session.initLogger(Session.java:226)
    at javax.mail.Session.<init>(Session.java:210)
    at javax.mail.Session.getInstance(Session.java:247)
    at com.secondstory.mailsender.MailSender.createSmtpSession(MailSender.java:67)
    at com.secondstory.mailsender.MailSender.sendSimpleMessage(MailSender.java:38)
    at com.secondstory.mailsender.MailSender.generateLostPasswordEmail(MailSender.java:79)
    at com.secondstory.mailsender.MailSenderTest.shouldReturnTrueWithCredentialsSet(MailSenderTest.java:49)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.lang.ClassNotFoundException: com.sun.mail.util.MailLogger
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at …
Run Code Online (Sandbox Code Playgroud)

java jakarta-mail noclassdeffounderror

15
推荐指数
1
解决办法
2万
查看次数

在我们的实时服务器上获取javax.mail.MessagingException:[EOF],但是我们的开发服务器上的一切都按预期工作

在我的笔记本电脑(Windows 10)或我们的开发服务器(CentOS)上运行此Java服务,一切都按预期工作.但是当我在我们的实时服务器(CentOS)上运行它时,我收到以下错误:

09/Sep/2016 08:31:07,005 [ERROR] [pool-2-thread-2] - EmailSender: A Messaging exception occurred in EmailSender
javax.mail.MessagingException: [EOF]
        at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:1363) ~[jar:rsrc:mail-1.4.jar!/:?]
        at com.sun.mail.smtp.SMTPTransport.helo(SMTPTransport.java:838) ~[jar:rsrc:mail-1.4.jar!/:?]
        at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:375) ~[jar:rsrc:mail-1.4.jar!/:?]
        at javax.mail.Service.connect(Service.java:275) ~[jar:rsrc:mail-1.4.jar!/:?]
        at javax.mail.Service.connect(Service.java:156) ~[jar:rsrc:mail-1.4.jar!/:?]
        at com.awesomecompany.messaging.server.EmailSender.sendEmail(EmailSender.java:99) [rsrc:./:?]
        at com.awesomecompany.messaging.server.MonitorDevicesRunnable.run(MonitorDevicesRunnable.java:82) [rsrc:./:?]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [?:1.7.0_75]
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) [?:1.7.0_75]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178) [?:1.7.0_75]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [?:1.7.0_75]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [?:1.7.0_75]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [?:1.7.0_75]
        at java.lang.Thread.run(Thread.java:745) [?:1.7.0_75]
Run Code Online (Sandbox Code Playgroud)

我的邮箱代码:

public void sendEmail(User user) {

        to[0] = user.getEmail();
        Properties props = new Properties();
        props.put("mail.smtp.host", host);
        props.put("mail.smtp.user", from);
        props.put("mail.smtp.password", password);
        props.put("mail.smtp.port", "587"); …
Run Code Online (Sandbox Code Playgroud)

java linux centos jakarta-mail

15
推荐指数
1
解决办法
7587
查看次数