2012-04-16 41 views
7

Tôi đang gửi thư bằng thư Java và máy chủ SMTP. Tôi muốn có thể thay đổi "tên" mà người nhận thấy khi họ nhận được một email - không chỉ đơn giản là tiền tố của địa chỉ email (bit trước @).Làm cách nào để đặt thuộc tính "tên" trong email

Tôi nghi ngờ tôi cần phải thay đổi hoặc thêm một trong các 'props.put();' cài đặt nhưng tôi không thể tìm ra cái nào.

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(); 
     } 
    } 
} 

Trả lời

7

Bạn cần thay đổi:

message.setFrom(new InternetAddress(FROM)); 

để

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

Tài liệu: Class InternetAddress

InternetAddress

public InternetAddress(String address, 
        String personal) 
        throws UnsupportedEncodingException 

Xây dựng một InternetAddress cho địa chỉ và tên cá nhân. Địa chỉ là được giả định là địa chỉ RFC822 hợp lệ về cú pháp.

Tham số:

địa chỉ - địa chỉ ở định dạng RFC822

cá nhân - tên cá nhân

Ném: UnsupportedEncodingException

+0

Cảm ơn rất nhiều. – Ankur

23

cú pháp địa chỉ điển hình có dạng "[email protected]" hoặc "Personal Name <[email protected]>".
Bạn có thể sử dụng cùng cú pháp cho cả hai địa chỉ trường FROM và TO.

Ví dụ:
Thay đổi sau tuyên bố:
String[] to = {"[email protected]","[email protected]"};
để
String[] to = {"Recipient1 Name <[email protected]>","My Name <[email protected]>"};

Bạn cũng có thể xây dựng đối tượng InternetAddress qua tên e-mailID và cá nhân tương ứng như các đối số.
Ví dụ:

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

người nhận sẽ thấy tên người gửi để trưng bày như "Ravinder" thay vì "[email protected]"

tham khảo:javax.mail.internet.InternetAddress

+0

Cảm ơn bạn đã thêm thông tin về việc thay đổi tên người nhận. – Ankur

+0

@Ankur: Hãy để tôi hy vọng bạn có câu trả lời đúng. [* Chấp nhận câu trả lời: Làm thế nào nó hoạt động? *] (Http: //meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235 # 5235) –

+0

Có thể ẩn hoàn toàn id email không? ngay cả sau khi di con trỏ – Sadanand

Các vấn đề liên quan