Java邮件:使用TLS通过gmail发送电子邮件

Java邮件:使用TLS通过gmail发送电子邮件,java,email,gmail,jakarta-mail,Java,Email,Gmail,Jakarta Mail,我试图用我的java应用程序发送简单的电子邮件,但当我执行sending mail时,控制台上只有“220 2.0.0 Ready to start TLS”,以后什么也不会发生。 以下是方法代码: try { /** Recipient address **/ String messageRecipient = "@live.com"; String pass = ""; /** sender address **/

我试图用我的java应用程序发送简单的电子邮件,但当我执行sending mail时,控制台上只有“220 2.0.0 Ready to start TLS”,以后什么也不会发生。 以下是方法代码:

try
    {
        /** Recipient address **/
        String messageRecipient = "@live.com";

        String pass = "";
        /** sender address **/
        String messageSender = "@gmail.com";

        /** get my properties **/
        Properties properties = System.getProperties();
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.starttls.enable", "true");
        properties.put("mail.smtp.host", "smtp.gmail.com");
        properties.put("mail.smtp.user", messageSender);
        properties.put("mail.smtp.password",  pass);
        properties.put("mail.debug", "true");
        properties.put("mail.smtp.debug", "true");
        properties.put("mail.smtp.port", "587");

        /** get default session object **/
        Session session = Session.getDefaultInstance(properties,// null);
                new javax.mail.Authenticator()
        {
            protected PasswordAuthentication getPasswordAuthentication()
            {
                return new PasswordAuthentication("@gmail.com", "");
            }
        });

        try
        {
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(messageSender));

            //set to: header field of the header
            message.addRecipient(Message.RecipientType.TO, 
                            new InternetAddress(messageRecipient));
            //set subject: header field
            message.setSubject("Welcome to java mail!");

            //send message
            Transport transport = session.getTransport("smtp");
            transport.connect("smtp.gmail.com", 587, messageSender, pass);
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();

            System.out.println(Errors.MESSAGE_SENT_SUCCESSFULLY);
            return null;
        }
        catch(MessagingException mex)
        {
            return Errors.MESSAGE_NOT_SENT;
        }
    }
    catch(Exception e)
    {
        return Errors.FILE_NOT_FOUND;
    }
}
并在控制台中调试输出:

     DEBUG: JavaMail version 1.4.5
    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.SMTPSS        LTransport,Sun Microsystems, Inc],                         com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTranspo        rt,Sun Microsystems, Inc],         com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Su        n Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Su        n 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: getProvider() returning         javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
    DEBUG SMTP: useEhlo true, useAuth true
    DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL false
    220 mx.google.com ESMTP e20sm6680361wiv.7
    DEBUG SMTP: connected to host "smtp.gmail.com", port: 587

    EHLO gadon-Komputer
    250-mx.google.com at your service, [83.22.91.238]
    250-SIZE 35882577
    250-8BITMIME
    250-STARTTLS
    250 ENHANCEDSTATUSCODES
    DEBUG SMTP: Found extension "SIZE", arg "35882577"
    DEBUG SMTP: Found extension "8BITMIME", arg ""
    DEBUG SMTP: Found extension "STARTTLS", arg ""
    DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
    STARTTLS
    220 2.0.0 Ready to start TLS
    DEBUG: getProvider() returning         javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
    DEBUG SMTP: useEhlo true, useAuth true
    DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL false
    220 mx.google.com ESMTP et10sm6688757wib.2
    DEBUG SMTP: connected to host "smtp.gmail.com", port: 587

    EHLO gadon-Komputer
    250-mx.google.com at your service, [83.22.91.238]
    250-SIZE 35882577
    250-8BITMIME
    250-STARTTLS
    250 ENHANCEDSTATUSCODES
    DEBUG SMTP: Found extension "SIZE", arg "35882577"
    DEBUG SMTP: Found extension "8BITMIME", arg ""
    DEBUG SMTP: Found extension "STARTTLS", arg ""
    DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
    STARTTLS
    220 2.0.0 Ready to start TLS

谁能告诉我这有什么问题吗?我阅读了houndreds关于javamail的主题,但我找不到问题的答案。。如果我要更改密码,则输出不会发生任何变化。

如果您不这样做,我建议您使用Spring来简化发送电子邮件的过程

要发送一封简单的电子邮件,您必须写以下内容:

 `import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.mail.MailException;
  import org.springframework.mail.MailSender;
  import org.springframework.mail.SimpleMailMessage;`
.........
@Autowired
private MailSender mailSender;

SimpleMailMessage mailMessage = new SimpleMailMessage();
            mailMessage.setTo("example@gmail.com");
            mailMessage.setFrom("myemail@gmail.com");
            mailMessage.setSubject(this.subject);
            mailMessage.setText(text.toString());
            try {
                this.mailSender.send(mailMessage);
                logger.info("Email inviata con successo");
            }
            catch (MailException ex) {
                // just log it and go on
                logger.warn("An exception occured when trying to send email", ex);
            }
以及在applicationContext.xml中

 <!-- MailSender used by EmailAdvice -->
    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="${mail.host}"/>
        <property name="port" value="${mail.port}" />
        <property name="username" value="${mail.username}" />
        <property name="password" value="${mail.password}" />

        <property name="javaMailProperties">
           <props>
                  <prop key="mail.smtp.auth">true</prop>
                  <prop key="mail.smtp.starttls.enable">true</prop>
               </props>
        </property>
    </bean>

真的
真的

有关详细信息,请遵循此简单教程

尝试删除
属性。put(“mail.smtp.starttls.enable”,“true”)
,将端口更改为465并添加这两个属性:

props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class",
            "javax.net.ssl.SSLSocketFactory");

您可以使用简化代码。(不要设置端口号,使用“smtps”协议,去掉验证器。)另外,。

下面的代码是一个使用java的电子邮件的简单实现,我在参考java mail API的文档后编写了此代码,它工作得非常好

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

public class Email
{
public Email()
    {
try {
    String host = "smtp.gmail.com";
    String username = "youmailid@gmail.com";
    String password = "XXXXXX";
    String body = "This is the message body.";
    String subject = "This is the message subject."; 
    //Set the properties
    Properties props = new Properties();
    props.put("mail.smtps.auth", "true");
    // Set the session here
    Session session = Session.getDefaultInstance(props);
    MimeMessage msg = new MimeMessage(session);
    // set the message content here
      msg.setSubject(subject);
      msg.setText(body);
      msg.setFrom(new InternetAddress(username));
      msg.addRecipient(Message.RecipientType.TO, 
              new InternetAddress(username));
    Transport t = session.getTransport("smtps");

    t.connect(host, username, password);
    t.sendMessage(msg, msg.getAllRecipients());
        t.close();
    }
   catch (Exception e) {
   e.printStackTrace();
   }
 finally {

    }
     }
    public static void main(String[] args)
    throws Exception {
            new Email();
    }

}

我有点晚了,但我也遇到了类似的问题,我想发布我的反馈。
有时,端口被防病毒软件阻止。例如,Avast就是这样做的

谢谢你。你的帖子帮助我简化了代码,我放的大多数道具都不是必需的。我知道如何通过关闭防火墙发送邮件。。该死的细节。。谢谢你的帮助!