我使用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();
}
}
}
答案 0 :(得分:25)
典型地址语法的格式为"user@host.domain"
或"Personal Name <user@host.domain>"
您可以对FROM和TO字段地址使用相同的语法。
示例强>:
更改以下声明:
String[] to = {"mygmail@gmail.com","me@myservercom"};
到
String[] to = {"Recipient1 Name <mygmail@gmail.com>","My Name <me@myservercom>"};
您还可以构造InternetAddress对象,将相应的电子邮件ID和个人名称作为参数传递 示例:
String FROM = "my.email.id@my.server.domain";
InternetAddress from = new InternetAddress( FROM, "Ravinder" );
收件人会看到发件人姓名显示为"Ravinder"
而不是"my.email.id@my.server.domain"
答案 1 :(得分:8)
您需要更改:
message.setFrom(new InternetAddress(FROM));
到
message.setFrom(new InternetAddress(FROM, "Company XYZ"));
网际地址
public InternetAddress(String address, String personal) throws UnsupportedEncodingException
根据地址和个人名称构建InternetAddress。地址是 假设是一个语法上有效的RFC822地址。
参数:
地址 - RFC822格式的地址
个人 - 个人姓名
抛出:UnsupportedEncodingException