如何在电子邮件中设置“名称”属性

我发送邮件与Java邮件和SMTP服务器。 我希望能够更改收件人在收到电子邮件时看到的“名称” – 而不仅仅是电子邮件地址的前缀(@之前的位)。

我怀疑我需要更改或添加’props.put();’ 设置,但我无法解决哪一个。

public class Email { private final String HOST = "mail.myserverr.com"; private final String USER = "me+myserver.com"; private final String FROM = "me@myserver.com"; private final String PASS = "mypass"; private final String PORT = "25"; private final String AUTH = "true"; @Test public void sendMail(){ String[] to = {"mygmail@gmail.com","me@myservercom"}; sendMessage(to,"Let's go","What's up"); } public void sendMessage(String[] to, String subject, String msg) { Properties props = System.getProperties(); props.put("mail.smtp.starttls.enable", "true"); // added this line props.put("mail.smtp.host", HOST); props.put("mail.smtp.user", USER); props.put("mail.smtp.password", PASS); props.put("mail.smtp.port", PORT); props.put("mail.smtp.auth", AUTH); props.put("mail.smtp.socketFactory.port", PORT); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.socketFactory.fallback", "false"); Session session = Session.getDefaultInstance(props, null); MimeMessage message = new MimeMessage(session); try { message.setFrom(new InternetAddress(FROM)); InternetAddress[] toAddress = new InternetAddress[to.length]; // To get the array of addresses for( int i=0; i < to.length; i++ ) { // changed from a while loop toAddress[i] = new InternetAddress(to[i]); } for( int i=0; i < toAddress.length; i++) { // changed from a while loop message.addRecipient(Message.RecipientType.TO, toAddress[i]); } message.setSubject(subject); message.setText(msg); Transport transport = session.getTransport("smtps"); transport.connect(HOST, USER, PASS); transport.sendMessage(message, message.getAllRecipients()); transport.close(); } catch (AddressException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } } } 

典型的地址语法格式为"user@host.domain""Personal Name "
您可以对FROM和TO字段地址使用相同的语法。

示例
更改以下声明:
String[] to = {"mygmail@gmail.com","me@myservercom"};

String[] to = {"Recipient1 Name ","My Name "};

您还可以构造InternetAddress对象,将相应的电子邮件ID和个人名称作为参数传递。
示例

 String FROM = "my.email.id@my.server.domain"; InternetAddress from = new InternetAddress( FROM, "Ravinder" ); 

收件人将看到发件人姓名显示为"Ravinder"而不是"my.email.id@my.server.domain"

参考: javax.mail.internet.InternetAddress

你需要改变:

 message.setFrom(new InternetAddress(FROM)); 

 message.setFrom(new InternetAddress(FROM, "Company XYZ")); 

文档: 类InternetAddress

网际地址

 public InternetAddress(String address, String personal) throws UnsupportedEncodingException 

根据地址和个人名称构建InternetAddress。 假定该地址是语法上有效的RFC822地址。

参数:

address – RFC822格式的地址

个人 – 个人名字

抛出:UnsupportedEncodingException