在javax.mail.MimeMessage中设置发件人名称?

51

目前,我们的应用程序使用javax.mail发送电子邮件,使用javax.mail.MailMessage。我们通过以下方式设置电子邮件的发件人头:

Message msg = new MimeMessage(mailSession);
msg.setFrom(new InternetAddress("mail@companyxyz.com"));

这个代码可以正常工作,但我们希望将 "发件人" 部分变得更加用户友好。目前,收到电子邮件的人会在他们的收件箱中的 "发件人" 部分看到 "mail@companyxyz.com"。相反,我们希望他们在那里看到 "Company XYZ"。我想这可能是通过 addHeader() 方法完成的,但我不确定标题名称是什么。

4个回答

126

2
也许值得测试一下是否可以使用"Company XYZ mail@companyxyz.com"来使用IntenetAddress(String,boolean)构造函数严格检查地址语法但仍然具有个人名称。 - erickson

23
如果您想将电子邮件和姓名存储在一个字符串中(比保留两个字符串更简单):
Message msg = new MimeMessage(mailSession);
msg.setFrom(new InternetAddress("Company XYZ <mail@companyxyz.com>"));

2
+1,因为这个解决方案也适用于Spring Mail的SimpleMimeMessage,在那里无法访问MimeMessage实例,也不直接使用InternetAddress。它仅在字符串上操作。 - Jagger

3

如果我使用带有特殊字符(如 \u00FA)的本地化文本,那么如果我只是使用“

”作为电子邮件地址别名的编码,对于某些POP3客户端可能会出现问题。

MimeMessage m = new MimeMessage(session);
m.setFrom();

可以通过单独的电子邮件地址和别名来解决,方法如下:

MimeMessage m = new MimeMessage(session);
            m.setFrom(new InternetAddress(session.getProperty("mail.from"), session.getProperty("mail.from.alias"),"UTF8"));

参考:https://javamail.java.net/nonav/docs/api/javax/mail/internet/InternetAddress.html#InternetAddress(java.lang.String,%20java.lang.String,%20java.lang.String)

这是一个关于Java邮件技术的参考链接,其中介绍了InternetAddress类中的构造函数。该构造函数接受三个参数:用户名、电子邮件地址以及可选的描述信息,用于创建一个InternetAddress实例。

2
ic = new InitialContext();

final Session session = (Session) ic.lookupLink(snName);
final Properties props = session.getProperties();

props.put("mail.from", mailFrom); //blabla@mail.com
props.put("mail.from.alias", mailName);//"joao Ninguem"

// Create a message with the specified information.
final MimeMessage msg = new MimeMessage(session);
msg.setSubject(subject);
msg.setSentDate(new Date());

msg.setFrom(new InternetAddress(session.getProperty("mail.from"), session.getProperty("mail.from.alias"), "UTF8"));


msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(mailTo, false));
msg.setContent(body, "text/html");

// Create a transport.
Transport.send(msg);

请简要解释一下你正在做什么。 - clinomaniac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接