You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java调用Hotmail SMTP发邮件时遭遇554.5.2.252错误

解决Java发送Hotmail邮件时554.5.2.252 SendAsDenied错误

错误原因

错误信息554 5.2.252 SendAsDenied; sansalnuray@hotmail.com not allowed to send as Sansal@SansalPC.mshome.net明确说明:你的JavaMail程序没有指定合法的发件人地址,默认使用了本地主机名Sansal@SansalPC.mshome.net作为发件人标识,但Hotmail/Office365的SMTP服务器只允许你用登录账号sansalnuray@hotmail.com作为发件人发送邮件,因此触发了发送权限拒绝的错误。

解决方案

在构建邮件时,必须显式设置与SMTP登录账号一致的发件人地址,同时修正内容类型的错误写法。

修改后的完整代码

package utilities;

import java.io.IOException;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;


public class SecureEmail
{

    Session newSession = null;
    MimeMessage mimeMessage = null;
    public static void main(String args[]) throws AddressException, MessagingException, IOException
    {
        SecureEmail mail = new SecureEmail();
        mail.setupServerProperties();
        mail.draftEmail();
        mail.sendEmail();
    }

    private void sendEmail() throws MessagingException {
        String fromUser = "sansalnuray@hotmail.com";  
        String fromUserPassword = "***";  
        String emailHost = "smtp.office365.com";
        Transport transport = newSession.getTransport("smtp");
        transport.connect(emailHost, fromUser, fromUserPassword);
        transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
        transport.close();
        System.out.println("Email successfully sent!!!");
    }

    private MimeMessage draftEmail() throws AddressException, MessagingException, IOException {
        String[] emailReceipients = {"sansalnuray@gmail.com"};  
        String emailSubject = "Test Mail";
        String emailBody = "Test Body of my email";
        mimeMessage = new MimeMessage(newSession);
        
        // 显式设置发件人地址,与SMTP登录账号一致
        mimeMessage.setFrom(new InternetAddress("sansalnuray@hotmail.com"));
        
        for (int i =0 ;i<emailReceipients.length;i++)
        {
            mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(emailReceipients[i]));
        }
        mimeMessage.setSubject(emailSubject);
       
         MimeBodyPart bodyPart = new MimeBodyPart();
         // 修正内容类型写法:text/html 或 text/plain
         bodyPart.setContent(emailBody,"text/html");
         MimeMultipart multiPart = new MimeMultipart();
         multiPart.addBodyPart(bodyPart);
         mimeMessage.setContent(multiPart);
         return mimeMessage;
    }

    private void setupServerProperties() {
        Properties properties = System.getProperties();
        properties.put("mail.smtp.port", "587");
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.starttls.enable", "true");
        // 推荐使用Session.getInstance而非getDefaultInstance,避免共享配置冲突
        newSession = Session.getInstance(properties,null);
    }
    
}   

额外注意事项

  • 如果你的Hotmail账号开启了两步验证,需要使用应用密码替代普通登录密码
  • 确保SMTP服务器地址smtp.office365.com、端口587、STARTTLS启用的配置正确
  • 避免使用Session.getDefaultInstance(),它会共享全局Session配置,可能导致后续邮件发送出现异常

内容的提问来源于stack exchange,提问作者Sansal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:31:16