6

我正在尝试编写一个简单的邮件发件人类,它将接收一堆参数,并使用这些参数将使用我们的 Exchange 2010 服务器发送一封电子邮件。虽然身份验证等似乎工作正常,但当代码实际尝试发送电子邮件时(我认为),我收到以下异常。我已确保身份验证正常工作,并且我从会话中获得了传输,但它仍然失败。任何人都可以对我做错或错过的事情发表一些看法吗?谢谢。

例外:

javax.mail.MessagingException: [EOF]
       at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:1481)
       at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1512)
       at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1054)
       at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:634)
       at javax.mail.Transport.send0(Transport.java:189)
       at javax.mail.Transport.send(Transport.java:140)
       at com.ri.common.mail.util.MailSender.sendHTMLEmail(MailSender.java:75)
       at com.ri.common.mail.util.MailSender.main(MailSender.java:106)

相关代码:

import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;


public class MailSender
{
    public static void sendHTMLEmail( String fromEmailId, String toEmailId, String host, String hostUserName,
            String hostPassword, String mailSubject, String mailBody )
    {
        // Get system properties.
        Properties props = System.getProperties();
        // Setup mail server
        props.put( "mail.transport.protocol", "smtp" );
        props.put( "mail.smtp.host", host );
        props.put( "mail.smtp.auth", "true" );

        final String hostUName = hostUserName;
        final String hPassword = hostPassword;

        Authenticator authenticator = new Authenticator()
        {
            protected PasswordAuthentication getPasswordAuthentication()
            {
                return new PasswordAuthentication( hostUName, hPassword );
            }
        };

        // Get the default Session object.
        Session session = Session.getDefaultInstance( props, authenticator );

        try
        {
            // Create a default MimeMessage object.
            MimeMessage message = new MimeMessage( session );

            // Set From: header field of the header.
            message.setFrom( new InternetAddress( fromEmailId ) );

            // Set To: header field of the header.
            message.addRecipient( Message.RecipientType.TO, new InternetAddress( toEmailId ) );

            // Set Subject: header field
            message.setSubject( mailSubject );

            // Send the actual HTML message, as big as you like
            message.setContent( mailBody, "text/html" );

            // Send message
            Transport.send( message, message.getAllRecipients() );
            System.out.println( "Sent message successfully...." );
        }
        catch( Exception mex )
        {
            mex.printStackTrace();
        }

    }

    public static void main( String[] args )
    {

        String to = "someCorrectEmailID@xyz.com";
        String from = "someCorrectEmailID@xyz.com";
        String host = "correctHostForExch2010";
        String user = "correctUser";
        String password = "CorrectPassword";
        String subject = "Test Email";
        String body = "Hi there. This is a test email!";

        MailSender.sendHTMLEmail( from, to, host, user, password, subject, body );
    }
}

编辑:我打开调试,它说

MAIL FROM:<someCorrectEmailID@xyz.com> 530 5.7.1 Client was not authenticated 
DEBUG SMTP: got response code 530, with response: 530 5.7.1 Client was not authenticated. 

为什么会在会话身份验证成功时出现这种情况?

4

3 回答 3

6

谢谢亚历克斯和比尔。我通过启用以下属性使其工作。

props.put("mail.smtp.starttls.enable", "true");
于 2012-09-06T20:52:43.337 回答
1

两种可能:

  1. 由于您使用Session.getDefaultInstance ,它实际上并没有尝试进行身份验证。
  2. 它没有进行身份验证,因为它没有找到客户端和服务器都支持的任何身份验证机制,可能是因为服务器希望您在发送任何身份验证信息之前使用 SSL。尝试将“mail.smtp.starttls.enable”设置为“true”。

如果我们可以看到更多您的调试输出,我们可以告诉您其中哪一种是这种情况。

于 2012-09-06T20:20:46.260 回答
0

我也有这个错误跟踪我的更正是:

对于操作系统 centos7:进入 vi /etc/hosts 并验证 IP 地址是否正确

于 2016-11-11T17:09:30.327 回答