无法使用javamail和zimbra服务器发送电子邮件

无法使用javamail和zimbra服务器发送电子邮件,java,email,zimbra,Java,Email,Zimbra,我尝试使用javamail向Zimbra服务器发送电子邮件,但始终收到错误客户端主机被拒绝:访问被拒绝 这是我的java代码: public class TestMail { public static void main(String[] args) throws MessagingException { // provide recipient's email ID String to = "other_email@domain.com&qu

我尝试使用javamail向Zimbra服务器发送电子邮件,但始终收到错误客户端主机被拒绝:访问被拒绝

这是我的java代码:

public class TestMail {
    public static void main(String[] args) throws MessagingException {
        // provide recipient's email ID
        String to = "other_email@domain.com";

        // provide sender's email ID
        String from = "admin@domain.com";
        // provide username
        final String username = "admin@domain.com";
        // provide password
        final String password = "password-here";

        // provide host address
        String host = "mail.domain.com";
        // configure SMTP server details
        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
       // setting starttls
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", host);
        props.put("mail.smtp.port", "587");

        // create the Session object
        Session session = Session.getInstance(props, new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
        });
        
        

        try {
            // create a MimeMessage object
            Message message = new MimeMessage(session);

            // set From email field
            message.setFrom(new InternetAddress(from));

            // set To email field
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));

            // set email subject field
            message.setSubject("Here comes Jakarta Mail!");

            // set the content of the email message
            message.setText("Just discovered that Jakarta Mail is fun and easy to use");

            // send the email message
//          Transport.send(message);
            
            Transport tr = session.getTransport("smtp");
            tr.connect(host, username, password);
            message.saveChanges();
            tr.sendMessage(message, message.getAllRecipients());
            tr.close();

            System.out.println("Email Message Sent Successfully");

        } catch (MessagingException e) {
            throw new RuntimeException(e);
        } 
    }
}
我认为这是一个错误,因为java代码似乎不发送AUTH PLAIN,但我不知道为什么,也许我忘记了配置属性

但是使用nodejs代码,然后使用AUTH PLAIN成功发送电子邮件

调试日志:

DEBUG: Jakarta Mail version 1.6.5
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle], com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle]}
DEBUG: Providers Listed By Protocol: {imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle], imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "mail.domain.com", port 587, isSSL false
220 mail.domain.com ESMTP Postfix
DEBUG SMTP: connected to host "mail.domain.com", port: 587
EHLO Admin
502 5.5.2 Error: command not recognized
HELO Admin
250-mail.domain.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
DEBUG SMTP: use8bit false
MAIL FROM:<admin@mitc.vn>
250 mail.domain.com
RCPT TO:<other_email@domain.com>
250 2.1.0 Ok
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   other_email@domain.com
DATA
554 5.7.1 <unknown[xxx.xxx.xx.xx]>: Client host rejected: Access denied
DEBUG SMTP: got response code 554, with response: 554 5.7.1 <unknown[xxx.xxx.xx.xx]>: Client host rejected: Access denied

RSET
554 5.5.1 Error: no valid recipients
DEBUG SMTP: MessagingException while sending, THROW: 
com.sun.mail.smtp.SMTPSendFailedException: 554 5.7.1 <unknown[xxx.xxx.xx.xx]>: Client host rejected: Access denied

    at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2374)
    at com.sun.mail.smtp.SMTPTransport.data(SMTPTransport.java:2080)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1300)
    at test2.TestMail.main(TestMail.java:74)
调试:雅加达邮件1.6.5版 调试:已成功加载资源:/META-INF/javamail.default.providers 调试:加载的提供程序的表 调试:按类名列出的提供程序:{com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle],com.sun.mail.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle],com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,pop3,Oracle],com.sun.mail.smtpsslttransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.smtpsslttransport,Oracle],com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle],com.sun.mail.pop3.pop3sslsstore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.pop3ssstore,Oracle]] 调试:按协议列出的提供程序:{imap=javax.mail.Provider[STORE,imap,com.sun.mail.IMAPStore,Oracle],smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.SMTPTransport,Oracle],pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.POP3Store,Oracle],imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPStore,Oracle],smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.smtpsslttransport,Oracle],pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.pop3ssslstore,Oracle]} 调试:已成功加载资源:/META-INF/javamail.default.address.map 调试:getProvider()返回javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle] 调试SMTP:useEhlo true,useAuth true 调试SMTP:尝试连接到主机“mail.domain.com”,端口587,isSSL false 220 mail.domain.com ESMTP后缀 调试SMTP:已连接到主机“mail.domain.com”,端口:587 行政主任 502 5.5.2错误:无法识别命令 直升机管理员 250-mail.domain.com 250-流水线 250码10240000 250-VRFY 250-ETRN 250-STARTTLS 250-增强状态码 250-8比特 250 DSN 调试SMTP:use8bit false 邮寄地址: 250 mail.domain.com RCPT至: 250 2.1.0正常 调试SMTP:已验证的地址 调试SMTP:其他_email@domain.com 资料 554 5.7.1:拒绝客户端主机:拒绝访问 调试SMTP:获取响应代码554,响应:554 5.7.1:客户端主机被拒绝:访问被拒绝 RSET 554 5.5.1错误:没有有效的收件人 发送时调试SMTP:MessaginException,引发: com.sun.mail.smtp.SMTPSendFailedException:554 5.7.1:拒绝客户端主机:拒绝访问 在com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2374)上 在com.sun.mail.smtp.SMTPTransport.data上(SMTPTransport.java:2080) 在com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1300)上 位于test2.TestMail.main(TestMail.java:74)
您能提供完整的堆栈跟踪吗?这可能是因为电子邮件中的权限问题没有足够的权限或没有授权使用身份验证。您可以使用相同的详细信息使用命令行进行检查,并向您的电子邮件配置团队提出问题。您可以看到此链接@jmizv i updated debug log
554 5.7.1:Client host rejected:Access denied
,这可能意味着您的邮件服务器配置为不允许从您的主机进行访问。与服务器管理员交谈。@MarkRotteveel我认为java代码不发送AUTH-PLAIN,因此它没有经过身份验证