【问题标题】:Sending mail using javamail not working使用 javamail 发送邮件不起作用
【发布时间】:2012-09-26 11:41:10
【问题描述】:

我正在尝试使用我的 gmail 地址发送和发送电子邮件。 我将调试设置为 true,这就是我得到的。

DEBUG: JavaMail version 1.4.1
DEBUG: not loading file: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/javamail.providers
DEBUG: java.io.FileNotFoundException: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/javamail.providers (No such file or directory)
DEBUG: !anyLoaded
DEBUG: not loading resource: /META-INF/javamail.providers
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: !anyLoaded
DEBUG: not loading resource: /META-INF/javamail.address.map
DEBUG: not loading file: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/javamail.address.map
DEBUG: java.io.FileNotFoundException: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/javamail.address.map (No such file or directory)

DEBUG: setDebug: JavaMail version 1.4.1
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL true

然后我什么都不做,没有错误/警告/....

我正在使用这些设置:

mail.smtp.auth=true
mail.debug=true
mail.smtp.host=smtp.gmail.com
mail.smtp.user=MyOwnUserName@gmail.com
mail.smtp.password=MyOwnPassword
mail.transport.protocol=smtp
mail.smtp.port=465
mail.disable=false
mail.verbose=true
mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

我试过这些例子:

  1. http://adfblogs.blogspot.be/2012/01/sending-e-mail-from-adf-application.html
  2. Send email using java

都是同样的问题。而且我 100% 确定我的密码和电子邮件地址是正确的。

编辑: 我的代码(与第一个链接相同) 初始上下文 ic = new InitialContext(); 会话会话 = (Session) ic.lookup("mail/SugarCRMMailSession");

        Properties props = session.getProperties();

        String  to = emailID;

        String mailhost = props.getProperty("mail.smtp.host");
        String user = props.getProperty("mail.smtp.user");
        String password = props.getProperty("mail.smtp.password");
        String protocol = props.getProperty("mail.transport.protocol");

        String authorization = props.getProperty("mail.smtp.auth");
        String mailDisabled = props.getProperty("mail.disable");
        String verboseProp = props.getProperty("mail.verbose");
        String debugProp = props.getProperty("mail.debug");

        boolean sentDisabled = false;
        if(mailDisabled.equals("true"))
            sentDisabled = true;

        if(!sentDisabled){

            boolean auth = false;
            if(authorization.equals("true"))
                auth = true;

            boolean verbose = false;
            if(verboseProp.equals("true"))
                verbose = true;

            String mailer = "smtpsend";

            if(debugProp.equals("true"))
                session.setDebug(true);
            else
                session.setDebug(false);

            Message msg = new MimeMessage(session);
            msg.setFrom();      
            msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false));
            msg.setSubject(subject);
            msg.setContent(text, "text/html;charset=UTF-8");      
            msg.setHeader("X-Mailer", mailer);
            msg.setSentDate(new Date());

            SMTPTransport t = (SMTPTransport)session.getTransport(protocol);

            try {
                t.connect(mailhost, user, password);
                t.sendMessage(msg, msg.getAllRecipients());
            } finally {
                    t.close();
            }

             System.out.println("\nMail was sent successfully.");
        }else{
             System.out.println("Mail Sending is disabled.");
        }

【问题讨论】:

  • 您是否有可能在防火墙后面?
  • @AlexR telnet smtp.gmail.com 465 工作正常,所以应该没有任何网络问题。
  • @user1109719 启用调试并正确配置后,它应该打印 SMTP 协议日志 - 阅读它们,您会发现问题。否则你有网络问题或者可能是 SSL 协商问题
  • @KonstantinV.Salikhov 经过更多研究,我发现SSL协商确实存在一些问题。现在已经解决了。谢谢!

标签: java email gmail jakarta-mail


【解决方案1】:

这是解决您问题的完美解决方案,请在此处下载 Mail api jar 格式

Api mail providers for gmail

然后转到 Windows --> Preferencs --> Java --> Installed JRES -->

以及您正在使用的 JRE 只需选择它并编辑,然后将该外部 jar 添加到该 JRE 中并单击 okey 然后编译器将能够加载该 jar 文件。因此错误将得到解决。

试试看。

【讨论】:

  • 感谢您的回复。我面临的问题是我们网络中的 SSL。仅供参考,我在 WebLogic Server 上使用了 javamail。
  • 但是你有解决方案吗?什么是真正的解决方案,但是这个解决方案对我有用。你试过了吗?
  • 是的,如果我没记错的话,我们的网络管理员修改了我们的防火墙。
  • okey 所以有问题。你在哪个港口工作?
  • 如果您尝试使用端口 25,则可能不需要更改防火墙设置。我是这么认为的,因为我遇到了同样的问题,而且我在不改变防火墙的情况下得到了解决方案。
猜你喜欢
  • 2013-04-27
  • 1970-01-01
  • 2018-12-18
  • 2012-08-11
  • 1970-01-01
  • 2011-08-04
  • 2012-08-10
  • 2015-08-25
相关资源
最近更新 更多