我正在尝试使用Java Mail API发送邮件但我无法发送邮件,因为发生了以下错误
553 sorry, Authentication failed or timed out. Please do get messages first to authenticate yourself.(#4.4.3)
我无法理解问题出现在哪里或是否有任何特殊的设置为rediff? 我用Google搜索但没有找到解决方案。请帮我纠正它
这是我的代码
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import java.util.Properties;
public class TestMail {
public static void main(String[] args) throws Exception{
new TestMail().test();
}
public void test() throws Exception{
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host", "smtp.rediffmailpro.com");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", 587);
// props.put("mail.smtp.starttls.enable", "true");
Authenticator auth = new SMTPAuthenticator();
Session mailSession = Session.getDefaultInstance(props, auth);
// uncomment for debugging infos to stdout
mailSession.setDebug(true);
Transport transport = mailSession.getTransport();
MimeMessage message = new MimeMessage(mailSession);
message.setContent("This is a test", "text/plain");
message.setFrom(new InternetAddress("xxxxxxxxxxx"));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress("xxxxxxxxxxxxxxxxxx@gmail.com"));
transport.connect();
transport.sendMessage(message,
message.getRecipients(Message.RecipientType.TO));
transport.close();
//Transport.send(message);
}
private class SMTPAuthenticator extends javax.mail.Authenticator {
public PasswordAuthentication getPasswordAuthentication() {
String username = "xxxxxxxxx";
String password = "xxxxxxxx";
return new PasswordAuthentication(username, password);
}
}
}
答案 0 :(得分:1)
为防止被用于发送垃圾邮件,大多数SMTP服务器在您尝试使用它们来中继邮件(即将邮件发送到其他服务器)时需要某种身份验证。
这可以是连接到服务器时提供的用户和密码。其他服务器 - 这似乎是这里的情况 - 要求您首先使用POP3或IMAP连接它们(您必须发送身份验证)。他们记得您的IP地址已成功用于经过身份验证的连接,并在此之后允许SMTP中继请求一段时间。
检查goher的一种方法是这样的情况是使用您的邮件程序来获取您的邮件,然后立即从同一台机器(或至少通过相同的互联网连接)运行您的程序以发送邮件。
如果这样做,您必须在发送邮件之前在应用程序中建立POP3连接,或者与您的邮件提供商联系是否有其他方法来验证SMTP连接。
答案 1 :(得分:0)
我通过更改
解决了这个错误 props.put("mail.smtp.port", 587);
到
props.put("mail.smtp.port", "587");
在JavaMail API的Specfictions中,指定所有属性必须设置为String.Here是链接 https://javamail.java.net/nonav/docs/api/com/sun/mail/smtp/package-summary.html