我想使用Gmail的SMTP服务器发送邮件。你能告诉我为什么在运行波纹管代码时它不会连接到服务器。
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.MimeMessage;
public class SendTrick {
public static void main(String[] args) {
Properties props = new Properties();
props.put("mail.smtp.host", "465");
props.put("mail.from", "example@gmail.com");
props.put("mail.smtp.host", "smtp.gmail.com");
Session session = Session.getInstance(props, null);
try {
MimeMessage msg = new MimeMessage(session);
msg.setFrom();
msg.setRecipients(Message.RecipientType.TO,
"ex@gmail.com");
msg.setSubject("JavaMail hello world example");
msg.setText("Hello, world!\n");
Transport.send(msg);
} catch (MessagingException mex) {
System.out.println("send failed, exception: " + mex);
}
}
}
日志中的例外是
发送失败,异常:javax.mail.MessagingException:无法发送 连接到SMTP主机:smtp.gmail.com,port:25;嵌套异常是: java.net.ConnectException:连接被拒绝:连接
答案 0 :(得分:3)
您没有设置mail.smtp.port
,因为属性mail.smtp.host
上存在重复拼写错误,因此正在使用默认端口25,详见“例外”。
GMail的SMTP未在端口25上运行,这就是拒绝连接的原因。从Set up POP in mail clients开始,它看起来应该是465或587,因此您有一个有效值,但属性键不正确。
修改强>
您需要为端口使用正确的属性键:
props.put("mail.smtp.port", "465"); // <-- use the word "port", not "host"
修复此问题后,您还可能会发现身份验证问题,如评论中所述,除非您故意遗漏了问题中的javax.mail.Authenticator
代码。
编辑2:
正如我所提到的,您可能需要指定其他属性才能成功通过SMTP服务器进行身份验证并获得授权,例如:
props.put("mail.smtp.starttls.enable", "true");
但是,由于您使用端口465进行SSL连接,因此您还需要指定其他SSL属性,例如mail.smtp.socketFactory.class
。
答案 1 :(得分:0)
执行以下步骤:
代码
import java.util.Properties;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class email_try {
public static void main(String ap[]) {
String myEmail = "YOUR EMAIL";
String password = "YOUR PASSWORD";
String opponentEmail = "THEIR EMAIL";
Properties pro = new Properties();
pro.put("mail.smtp.host", "smtp.gmail.com");
pro.put("mail.smtp.starttls.enable", "true");
pro.put("mail.smtp.auth", "true");
pro.put("mail.smtp.port", "587");
Session ss = Session.getInstance(pro, new javax.mail.Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(myEmail, password);
}
});
try {
Message msg = new MimeMessage(ss);
msg.setFrom(new InternetAddress(myEmail));
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(opponentEmail));
msg.setSubject("Your Wish");
msg.setText("java email app");
Transport trans = ss.getTransport("smtp");
Transport.send(msg);
System.out.println("message sent");
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
请尝试此代码并输入正确的电子邮件ID和密码