我正在尝试使用我的java应用程序发送简单的电子邮件,但是当我执行发送邮件时,我只能在控制台上获得“220 2.0.0准备启动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主题,但我找不到我的问题的答案。如果我要更改密码,输出中没有任何变化。
答案 0 :(得分:2)
您可以使用Gmail example in the JavaMail FAQ简化代码。 (不要设置端口号,使用“smtps”协议,并删除Authenticator。)另外,change getDefaultInstance to getInstance。
答案 1 :(得分: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("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>
有关详细信息,请参阅此简单教程http://www.mkyong.com/spring/spring-sending-e-mail-via-gmail-smtp-server-with-mailsender/
答案 2 :(得分: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");
答案 3 :(得分:0)
下面的代码是一个使用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();
}
}
答案 4 :(得分:0)
我有点晚了,但我遇到了类似的问题,想发表我的反馈意见。 有时,端口被防病毒软件阻止。例如,Avast就是这样做的。