13

Java メールと SMTP サーバーでメールを送信しています。メール アドレスのプレフィックス (@ の前のビット) だけでなく、受信者がメール メッセージを受信したときに表示される「名前」を変更できるようにしたいと考えています。

「props.put();」の 1 つを変更または追加する必要があると思います。設定ですが、どれかわかりません。

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

2 に答える 2

32

一般的なアドレス構文は、 or の形式"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>"};

それぞれの電子メール ID と個人名を引数として渡す InternetAddress オブジェクトを構築することもできます。

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

于 2012-04-16T09:26:54.483 に答える
12

変更する必要があります:

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 形式のアドレス

personal - 個人名

スロー: UnsupportedEncodingException

于 2012-04-16T08:22:34.037 に答える