web-dev-qa-db-ja.com

JavaMailで使用できるようにメールサーバーを設定するにはどうすればよいですか。

以下のコードで作業しようとしています:

import javax.servlet.*;
import javax.servlet.http.*;
import Java.io.*;
import javax.mail.*;
import javax.mail.internet.*;   // important
import javax.mail.event.*;      // important
import Java.net.*;
import Java.util.*;

public class servletmail extends HttpServlet {
    public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out=response.getWriter();
        response.setContentType("text/html");
        try {
            Properties props=new Properties();
            props.put("mail.smtp.Host","localhost");   //  'localhost' for testing
            Session   session1  =  Session.getDefaultInstance(props,null);
            String s1 = request.getParameter("text1"); //sender (from)
            String s2 = request.getParameter("text2");
            String s3 = request.getParameter("text3");
            String s4 = request.getParameter("area1");
            Message message =new MimeMessage(session1);
            message.setFrom(new InternetAddress(s1));
            message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(s2,false));
            message.setSubject(s3);
            message.setText(s4);        
            Transport.send(message);
            out.println("mail has been sent");
        } catch(Exception ex) {
            System.out.println("ERROR....."+ex);
        }
    }
}

私はmail.jarとactivation.jarを使用しています。しかし、メールサーバーでどのように構成すればよいのか理解できません。どのメールサーバーを使用すればよいですか?上記のコードを使用してメールを送信できますか?メールサーバーの要件は何ですか?どのように設定すればよいですか?

18
simplyblue

開始するには、 SMTPサーバー が必要です。メールを送信できる必要があります。あなたがウェブサイトを提供することができるようにHTTPサーバーを必要とするのと同じ方法。どうやら(servletcontainerを備えた)HTTPサーバーはすでにあるが、まだSMTPサーバーが構成されていない。

ISPからのメールやGmail、Yahooなどのパブリックメールボックスなど、既存のメールアカウントに関連付けられたSMTPサーバーを利用できます。SMTP接続の詳細は、ドキュメントに記載されています。通常は、ホスト名ポート番号を知っているだけです。 username/passwordは、メールアカウントのものと同じです。

次に、ホスト名とポート番号をJavaMailのSMTPプロパティとして設定する必要があります。

Properties properties = new Properties();
properties.put("mail.transport.protocol", "smtp");
properties.put("mail.smtp.Host", "smtp.example.com"); // smtp.gmail.com?
properties.put("mail.smtp.port", "25");

ユーザー名/パスワードは、Authenticatorで次のように使用する必要があります。

properties.put("mail.smtp.auth", "true");
Authenticator authenticator = new Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("yourusername", "yourpassword");
    }
};

その後、次のようにメールセッションを取得できます。

Session session = Session.getDefaultInstance(properties, authenticator);

ただし、ISPまたは公開メールボックスのアカウントを使用すると、メールのFromフィールドでの自分のアドレスの使用に制限され、通常は一定の間隔で送信できるメールの量も制限されます。これを回避したい場合は、たとえば Apache James などの独自のSMTPサーバーをインストールする必要があります。これは、Javaベース、またはMicrosoft Exchangeとなど。

結局のところ、理解を深めるために JavaMailチュートリアル を使用することをお勧めします。

28
BalusC