3

非常に単純な電子メール アプリケーションを作成しようとしており、数行の基本的なコードを記述しました。私が取得し続ける1つの例外はcom.sun.mail.util.MailConnectException. 送信側のマシンの接続設定をいじることなく、プロキシまたはファイアウォールを介してコードを作成する簡単な方法はありますか?

これまでの私のコード:

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;

public class SendHTMLMail {
public static void main(String[] args) {
    // Recipient ID needs to be set
    String to = "test@test.com";

    // Senders ID needs to be set
    String from = "mytest@test.com";

    // Assuming localhost
    String host = "localhost";

    // System properties
    Properties properties = System.getProperties();

    // Setup mail server
    properties.setProperty("mail.smtp.host", host);

       //Get default session object
    Session session = Session.getDefaultInstance(properties);

    try {
        // Default MimeMessage object
        MimeMessage mMessage = new MimeMessage(session);

        // Set from
        mMessage.setFrom(new InternetAddress(from));

        // Set to
        mMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

        // Set subject
        mMessage.setSubject("This is the subject line");

        // Set the actual message
        mMessage.setContent("<h1>This is the actual message</h1>", "text/html");

        // SEND MESSAGE
        Transport.send(mMessage);
        System.out.println("Message sent...");
    }catch (MessagingException mex) {
        mex.printStackTrace();
    }
}
4

4 に答える 4

3

JavaMail でプロキシを機能させるには、適切な組み合わせで正しく設定する必要があるプロパティがたくさんあります。また、JavaMail は匿名の SOCKS プロキシのみをサポートしています

ただし、 Simple Java Mailはこれらのプロパティを処理し、その上に認証済みプロキシ サポートを追加します。これはオープンソースであり、現在も活発に開発されています。

Simple Java Mail を使用したコードは次のようになります。

Mailer mailer = new Mailer(// note: from 5.0.0 on use MailerBuilder instead
        new ServerConfig("localhost", thePort, theUser, thePasswordd),
        TransportStrategy.SMTP_PLAIN,
        new ProxyConfig(proxyHost, proxyPort /*, proxyUser, proxyPassword */)
);

mailer.sendMail(new EmailBuilder()
        .from("mytest", "mytest@test.com")
        .to("test", "test@test.com")
        .subject("This is the subject line")
        .textHTML("<h1>This is the actual message</h1>")
        .build());

System.out.println("Message sent...");

コードが大幅に減り、非常に表現力が豊かになります

于 2016-07-07T19:32:57.600 に答える
2

Oracle の JAVAMAIL API FAQ ( http://www.oracle.com/technetwork/java/javamail/faq/index.htm ) から:

JavaMail は現在、Web プロキシ サーバーを介したメール サーバーへのアクセスをサポートしていません。

しかし:

プロキシ サーバーが SOCKS V4 または V5 プロトコルをサポートし、匿名接続を許可し、JDK 1.5 以降および JavaMail 1.4.5 以降を使用している場合は、セッションごと、プロトコルごとに SOCKS プロキシを構成できます。 com.sun.mail.smtp パッケージの javadoc で説明されているように、「mail.smtp.socks.host」プロパティを設定します。

SOCKS プロキシを使用するには、Session オブジェクトにパラメータmail.smtp.socks.hostとパラメータを設定する必要があります - ここで説明されているように: https://javamail.java.net/nonav/docs/api/com/sun/mail/smtp/package- summary.htmlmail.smtp.socks.port

于 2013-09-30T11:47:49.557 に答える
-3

次のコードを試してみてください。簡単に作業できます...

public class SendMail{

    public static void main(String[] args) {

        final String username = "from@gmail.com";
        final String password = "password";

        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.port", "587");

        Session session = Session.getInstance(props,
          new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
          });

        try {

            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("from@gmail.com"));
            message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse("to@gmail.com"));
            message.setSubject("Testing Subject");
            message.setText("Dear Mail Crawler,"
                + "\n\n No spam to my email, please!");

            Transport.send(message);

            System.out.println("Done");

        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }
    }
}

インクルードjava-mail.jar、実行....

ここからコピペ

于 2013-09-30T11:48:11.927 に答える