25

JavaMail は、SMTP 接続を構成するために設定できる一連のプロパティを指定します。STARTTLS を使用するには、次のプロパティを設定する必要があります

mail.smtp.starttls.enable=true

smtp サービスを使用するためのユーザー名/パスワードはどこで指定すればよいですか? 以下を指定するだけで十分ですか。

mail.smtp.user=me
mail.smtp.password=secret

または、次を使用して明示的にログインする必要がありますか?

transport.connect(server, userName, password)

はい、私はすでにこれをしようとしましたが、 を使用して接続する必要があるようですtransport.connect(..)。しかし、そうであれば、mail.smtp.user& pass プロパティは何のためにあるのでしょうか? でsmtpを使用するには十分ではありませんstarttlsか?

4

5 に答える 5

27

これはSTARTTLSでGMail smtp(JavaMail)を使用している私のsendEmailメソッドです

public void sendEmail(String body, String subject, String recipient) throws MessagingException,
            UnsupportedEncodingException {
        Properties mailProps = new Properties();
        mailProps.put("mail.smtp.from", from);
        mailProps.put("mail.smtp.host", smtpHost);
        mailProps.put("mail.smtp.port", port);
        mailProps.put("mail.smtp.auth", true);
        mailProps.put("mail.smtp.socketFactory.port", port);
        mailProps.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        mailProps.put("mail.smtp.socketFactory.fallback", "false");
        mailProps.put("mail.smtp.starttls.enable", "true");

        Session mailSession = Session.getDefaultInstance(mailProps, new Authenticator() {

            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(login, password);
            }

        });

        MimeMessage message = new MimeMessage(mailSession);
        message.setFrom(new InternetAddress(from));
        String[] emails = { recipient };
        InternetAddress dests[] = new InternetAddress[emails.length];
        for (int i = 0; i < emails.length; i++) {
            dests[i] = new InternetAddress(emails[i].trim().toLowerCase());
        }
        message.setRecipients(Message.RecipientType.TO, dests);
        message.setSubject(subject, "UTF-8");
        Multipart mp = new MimeMultipart();
        MimeBodyPart mbp = new MimeBodyPart();
        mbp.setContent(body, "text/html;charset=utf-8");
        mp.addBodyPart(mbp);
        message.setContent(mp);
        message.setSentDate(new java.util.Date());

        Transport.send(message);
    }
于 2011-04-08T09:05:45.363 に答える
5

ログインするには、Authenticator をサブクラス化し、Session の PasswordAuthentication オブジェクトと環境プロパティを作成する必要があります。

Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {

    protected PasswordAuthentication getPasswordAuthentication() {
      return new PasswordAuthentication("user-name", "user-password");
    }
  });

ユーザー名は、gmail などの一部のサーバーの完全な電子メール ID である場合があります。お役に立てれば。

于 2011-04-08T08:12:51.047 に答える
4

ユーザーを次のように指定できます

mail.smtps.user=cayhorstmann@gmail.com

(またはmail.smtp.user使用しない場合mail.transport.protocol=smtps)セッションに使用するプロパティで。

AFAIK、パスワードを指定することはできません。しかし、あなたは確かにそれを小道具に入れて自分でそれを回収することができます。または、ユーザーにプロンプ​​トを表示するなど、他の方法で取得します。

あなたがそれを持っているとき、それをセッションに供給する2つの方法があります。より簡単なものは使用することです

Transport tr = session.getTransport();
tr.connect(null, password);
tr.sendMessage(message, message.getRecipients());

または、指摘したように、オーセンティケーターを使用できます。ただし、小道具のユーザーは無視されるため、明示的にに渡す必要がありますPasswordAuthentication。そうした場合、あなたの報酬はあなたが静的を使うことができるということですTransport.send

于 2012-06-06T00:24:55.273 に答える
4

セッションを作成するときにオーセンティケーターを提供する必要があります

Authenticator authenticator = new PasswordAuthentication("username", "password");
Session session = Session.getInstance(properties, authenticator);

次に、セッションを使用してメッセージを送信します (簡潔にするために、try/catch をスキップします)。

SMTPTransport tr = (SMTPTransport) session.getTransport("smtps");
tr.connect();
tr.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
于 2013-05-31T06:34:13.457 に答える