抱歉,身份验证失败或超时。请先获取消息以进行身份​​验证。(#4.4.3)

时间:2014-12-12 05:05:06

标签: java javamail

我正在尝试使用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);
        }
    }
}

2 个答案:

答案 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