2012-04-16 86 views
7

我使用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 = "[email protected]"; 
    private final String PASS = "mypass"; 
    private final String PORT = "25"; 
    private final String AUTH = "true"; 

    @Test 
    public void sendMail(){ 
     String[] to = {"[email protected]","[email protected]"}; 
     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(); 
     } 
    } 
} 

回答

7

你需要改變:

message.setFrom(new InternetAddress(FROM)); 

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

文檔:Class InternetAddress

網際地址

public InternetAddress(String address, 
        String personal) 
        throws UnsupportedEncodingException 

在給出的地址和個人名稱的網際地址。地址是 被假定爲語法上有效的RFC822地址。

參數:

地址 - 在RFC822格式

個人地址 - 個人名下

拋出:UnsupportedEncodingException

+0

非常感謝。 – Ankur 2012-04-17 00:56:24

23

典型的地址語法形式"[email protected]""Personal Name <[email protected]>"的。
您可以對FROM和TO字段地址使用相同的語法。


更改如下聲明:
String[] to = {"[email protected]","[email protected]"};

String[] to = {"Recipient1 Name <[email protected]>","My Name <[email protected]>"};

您也可以通過構建相應的電子mailID和個人名作爲參數網際地址對象。

String FROM = "[email protected]"; 
InternetAddress from = new InternetAddress(FROM, "Ravinder"); 

收件人將看到發送者姓名以顯示爲"Ravinder"代替"[email protected]"

參考:javax.mail.internet.InternetAddress

+0

感謝您提供更改收件人姓名的額外信息。 – Ankur 2012-04-17 00:56:47

+0

@Ankur:讓我希望你有正確的答案。 [*接受答案:它是如何工作的?](http://meta.stackexchange。COM /問題/ 5234 /如何-不接受-的回答工作/ 5235#5235) – 2014-03-10 11:37:37

+0

是否有可能完全隱藏電子郵件ID?即使在光標懸停之後 – Sadanand 2015-03-07 03:57:02

相關問題