2012-06-08 451 views
0

我想用我的Java应用程序发送简单的电子邮件,但是当我将执行发送邮件时,我只在控制台上出现“220 2.0.0准备启动TLS”稍后发生。 这里是方法的代码:Java邮件:通过gmail与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 

有人能告诉我有什么错呢?我读了关于javamail的houndreds主题,但是我找不到我的问题的答案。如果我将更改密码,输出中没有任何更改。

回答

2

您可以使用Gmail example in the JavaMail FAQ简化您的代码。 (不要设置端口号,使用“smtps”协议,并摆脱Authenticator。)另外,change getDefaultInstance to getInstance

+0

谢谢你。你的文章帮助我简化了代码,我放置的大部分道具都没有必要。我想通过关闭防火墙来发送邮件..该死的细节..感谢您的帮助! – gadon

0

如果你不建议你使用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("[email protected]"); 
      mailMessage.setFrom("[email protected]"); 
      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> 

欲了解更多信息通过删除按照这个简单的教程http://www.mkyong.com/spring/spring-sending-e-mail-via-gmail-smtp-server-with-mailsender/

0

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

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

下面的代码是一个简单的实现电子邮件用java的,我写这指的Java邮件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 = "[email protected]"; 
    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(); 
    } 

} 
0

我有点晚了,但我遇到了类似的问题,并希望张贴我的反馈。 有时,端口被防病毒软件阻止。例如Avast就是这么做的。

相关问题