java - 不能用Java发送邮件

标签 java email tomcat smtp jakarta-mail

我正在尝试用 java 发送邮件,但我不断收到此错误“com.sun.mail.smtp.SMTPSendFailedException:550 未能满足 SPF 要求”,我已经搜索了互联网,看看是否有其他人遇到过这个问题java,一无所获。任何人都知道这个错误意味着什么?我发送电子邮件的代码如下。

            //Create session and message
            Properties props = System.getProperties();
            props.put("mail.smtp.user", user);
            props.put("mail.smtp.password", password);
            props.put("mail.smtp.auth", "false");
            props.put("mail.smtp.host", mailhost);

            javax.mail.Authenticator auth = null;
            auth = new javax.mail.Authenticator() {
                @Override
                public javax.mail.PasswordAuthentication getPasswordAuthentication() {
                    return new javax.mail.PasswordAuthentication(user, password);
                }
            };
            session = Session.getInstance(props, auth);
            Message msg = new MimeMessage(session);

           //Set from,recipients,content and other stuff here
           //...................

           //Send the message
           Transport.send(msg);

最佳答案

通过将“mail.smtp.auth”属性设置为 true 并添加属性“mail.smtp.ssl.enable”并将其设置为 true 然后最终而不是使用下面的静态方法发送消息。

Transport.send(Message msg) 

我在从 session 对象获取的传输对象上使用实例方法来发送消息。

transport.sendMessage(Message msg, Address[] addresses)  

下面是修改后的工作代码。

       //Create session
        Properties props = System.getProperties();
        props.put("mail.smtp.user", user);
        props.put("mail.smtp.password", password);
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.host", mailhost);
        props.put("mail.smtp.ssl.enable", "true");


        javax.mail.Authenticator auth = null;
        auth = new javax.mail.Authenticator() {
            @Override
            public javax.mail.PasswordAuthentication getPasswordAuthentication() {
                return new javax.mail.PasswordAuthentication(user, password);
            }
        };
        session = Session.getInstance(props, auth);
        //get transport object from session and connect to mail server
        Transport tr = session.getTransport("smtp");
        tr.connect(session.getProperty("mail.smtp.host"),  session.getProperty("mail.smtp.user"), session.getProperty("mail.smtp.password"));

        //create message  and set from,recipients,content and other stuff here on the message object.
        Message msg = new MimeMessage(session);
       //..................
       //...................

       //Save and send the message
        msg.saveChanges();
        tr.sendMessage(msg, msg.getAllRecipients());
        tr.close();

此链接确实帮助我解决了问题:http://javamail.java.net/nonav/docs/api/com/sun/mail/smtp/package-summary.html

关于java - 不能用Java发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18189748/

相关文章:

java - 如何打印特定数量的字符串,例如 "_"?

java - 无法实例化类型Rankup

java - 记录在我的对象上获得锁定的所有线程

email - 如何使已发送的电子邮件在 GMail 收件人的 View 中以邮件 ID、回复和引用的方式显示为线索

email - 我可以使用邮戳来创建线索式回复吗?

java - log4j2 RollingFile Appender 不更改 Tomcat 上的文件名?

java - 在 tomcat 中关闭浏览器进行 websocket 连接刷新时,tomcat 控制台中抛出错误

java - for循环遍历java中的偶数

php - 为什么 Outlook 电子邮件将我的电子邮件更改为扩展名为 .dat 的附件?

android - 将实时开发人员通知发送到 Tomcat 机器以进行应用内购买