Nir*_*ati 1 java jakarta-mail smtp-auth
我正在尝试从Java发送邮件. 如果我将邮件发送到同一个SMTP它工作正常. 如果我将邮件发送到外部SMTP,如Gmail,雅虎等,它会显示错误,如,
[com.sun.mail.smtp.SMTPAddressFailedException:550 5.7.1无法中继] [1]
错误:
SimpleEmail Start
javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
com.sun.mail.smtp.SMTPAddressFailedException: 550 5.7.1 Unable to relay
Mail Send Successfully
at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:2064)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1286)
at javax.mail.Transport.send0(Transport.java:255)
at javax.mail.Transport.send(Transport.java:124)
at com.nirav.java.project.demo.JavaMailSend.sendEmail(JavaMailSend.java:26)
at com.nirav.java.project.demo.NewSimpleMail.main(NewSimpleMail.java:34)
Caused by: com.sun.mail.smtp.SMTPAddressFailedException: 550 5.7.1 Unable to relay
at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1917)
... 5 more
Run Code Online (Sandbox Code Playgroud)
邮件发送代码:
try {
System.out.println("SimpleEmail Start");
String smtpHostServer = "XX.XX.XX.XXX";
final String toEmail = "XXXXXXXXXX@XXX.XXX";
final String fromEmail = "XXXXXXXXXX@XXX.XXX";
final String password = "XXXXXXXXXXXX";
Properties props = System.getProperties();
props.put("mail.smtp.host", smtpHostServer);
props.put("mail.smtp.port", "25"); //If other then
Session session = Session.getInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(fromEmail, password);
}
});
//Session session = Session.getInstance(props, null);
MimeMessage message = new MimeMessage(session);
message.addHeader("Content-type", "text/HTML; charset=UTF-8");
message.addHeader("format", "flowed");
message.addHeader("Content-Transfer-Encoding", "8bit");
message.setFrom(new InternetAddress("XXXXXX@XXX.XXX", "NoReply-JD"));
message.setReplyTo(InternetAddress.parse("XXXXXXXXX@XXX.XXX", false));
message.setSubject(subject, "UTF-8");
message.setText(body, "UTF-8");
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail, false));
Transport.send(message);
System.out.println("Mail Send Successfully");
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
请帮我.Thnaks.
原来,我即将发布此评论,但它太长了.
错误很明显,不允许使用给定的SMTP服务器作为中继.(什么是SMPT继电器?)
有几个原因导致这种情况发生:
您未经过身份验证(需要在发送前登录)
收件人不在允许中继的域列表中
您要连接的IP地址不在白名单中(在后缀上下文中也称为mynetworks)
没有提供更多信息(您正在使用哪个SMTP服务器,您在哪里发送邮件,您是否经过身份验证),我想没有人会帮助您.
发件人无权发送到目的地.这可能是每个主机或每个收件人筛选的结果.本备忘录不讨论任何此类过滤的优点,但提供了一种报告此类过滤的机制.这仅作为永久性错误有用.