【问题标题】:How do I set the "name" attribute in an email如何在电子邮件中设置“名称”属性
【发布时间】:2012-04-27 13:55:12
【问题描述】:

我正在使用 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();
        }
    }
}

【问题讨论】:

    标签: java smtp jakarta-mail


    【解决方案1】:

    你需要改变:

    message.setFrom(new InternetAddress(FROM));
    

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

    文档:Class InternetAddress

    互联网地址

    public InternetAddress(String address,
                       String personal)
                       throws UnsupportedEncodingException 
    

    在给定地址和个人姓名的情况下构造一个 InternetAddress。地址是 假定为语法上有效的 RFC822 地址。

    参数:

    address - RFC822 格式的地址

    personal - 个人姓名

    抛出:UnsupportedEncodingException

    【讨论】:

      【解决方案2】:

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

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

      String[] to = {"Recipient1 Name &lt;mygmail@gmail.com&gt;","My Name &lt;me@myservercom&gt;"};

      您还可以构造 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

      【讨论】:

      • 感谢您提供有关更改收件人姓名的额外信息。
      • 可以完全隐藏email id吗?即使在光标悬停后
      • @Sadanand:您的问题与 Java Mail 无关。您为什么不发布一个新问题,其中包含有关电子邮件 ID 出现位置以及悬停与它的关系的上下文?
      • @Ankur:希望你的答案是对的。 Accepting Answers: How does it work?
      • 我们也可以更改显示电子邮件 ID 吗?我的意思是不同的身份验证 ID 和显示 ID。
      猜你喜欢
      • 2011-11-01
      • 2016-08-02
      • 1970-01-01
      • 2012-01-21
      • 1970-01-01
      • 2016-06-18
      • 1970-01-01
      • 2021-04-13
      相关资源
      最近更新 更多