以下是该程序,我正在尝试发送电子邮件。代码没有错误,我没有得到任何运行时异常。但代码无法发送电子邮件。我已经修改了很多这段代码但却无法得到实际上错误的内容。 发件人和收件人都有GMail帐户。发件人已禁用两步验证流程。 (我认为对接收者来说不重要。是吗?)
代码:
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
class tester {
public static void main(String args[]) {
Properties props = new Properties();
props.put("mail.smtp.host" , "smtp.gmail.com");
props.put("mail.stmp.user" , "username"); // username or complete address ! Have tried both
Session session = Session.getDefaultInstance( props , null);
String to = "me@gmail.com";
String from = "from@gmail.com";
String subject = "Testing...";
Message msg = new MimeMessage(session);
try {
msg.setFrom(new InternetAddress(from));
msg.setRecipient(Message.RecipientType.TO , new InternetAddress(to));
msg.setSubject(subject);
msg.setText("Working fine..!");
System.out.println("fine!!??");
} catch(Exception exc) {
System.out.println(exc);
}
}
}
答案 0 :(得分:4)
好吧,您的代码实际上并没有尝试发送消息。看看Transport.send
。
以下是一些例子:
答案 1 :(得分:1)
首先,您忘记致电Transport.send()
发送MimeMessage
。
其次,需要将GMail配置为使用TLS或SSL连接。以下内容需要添加到您的Properties
(props
):
//To use TLS
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
//To use SSL
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
要连接到GMail SMTP,请使用Transport.connect()
方法。我发现您的代码中根本没有使用任何Transport
,因此请添加:
Transport transport = session.getTransport();
//Connect to GMail
transport.connect("smtp.gmail.com", 465, "USERNAME_HERE", "PASSWORD_HERE");
transport.send(msg);
或者,您可以通过添加Session
作为参数来创建javax.mail.Authenticator
。
示例:
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("USERNAME_HERE", "PASSWORD_HERE");
}
});
我希望这会对你有所帮助。
资源: