1

javamail を使用してメールを送信しようとしていますが、このテーマは初めてです。これまでのところ、コンパイル エラーも実行エラーも発生していませんが、メールは送信されません。ローカル SMTP サーバー (MailUtilLocal.java) と電子メールを送信するサーブレット (EmailServlet) で電子メールを送信するためのヘルパー クラスを使用しています。コードは次のとおりです。

` //EmailServlet.java:

import Beans.Usuario;
import IOBD.InputOutputBD;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.MessagingException;
import Servlets.MailUtilLocal;
import java.util.*;

public class EmailServlet extends HttpServlet {

protected void doPost(HttpServletRequest request,
        HttpServletResponse response)
        throws ServletException, IOException {
    // get parameters from the request
    String userId = request.getParameter("userId");
    String password = request.getParameter("password");
    String nombre = request.getParameter("nombre");
    String tipo = request.getParameter("tipo");
    String emailAddress = request.getParameter("emailAddress");
 // create the User object and write it to a file
    Usuario user = new Usuario(userId, password, nombre, tipo, emailAddress);
    ServletContext sc = getServletContext();

 // store the User object in the session
    HttpSession session = request.getSession();
    session.setAttribute("user", user);


 // send email to user
    String to = emailAddress;
    String from = "email_list@murach.com";
    String subject = "Welcome to our email list";
    String body = "Dear " + nombre + ",\n\n"
            + "Thanks for joining our email list. "
            + "We'll make sure to send you announcements "
            + "about new products and promotions.\n"
            + "Have a great day and thanks again!\n\n"
            + "Kelly Slivkoff\n" + "Mike Murach & Associates";
    boolean isBodyHTML = false;
    try {
        MailUtilLocal.sendMail(to, from, subject, body, isBodyHTML);
    } catch (MessagingException e) {
        String errorMessage =
                "ERROR: Unable to send email. "
                + "Check Tomcat logs for details.<br>"
                + "NOTE: You may need to configure your "
                + "system as described in chapter 15.<br>"
                + "ERROR MESSAGE: " + e.getMessage();
        request.setAttribute("errorMessage", errorMessage);
        this.log("Unable to send email. \n"
                + "Here is the email you tried to send: \n"
                + "=====================================\n"
                + "TO: " + emailAddress + "\n"
                + "FROM: " + from + "\n"
                + "SUBJECT: " + subject + "\n"
                + "\n"
                + body + "\n\n");


    }
    // forward request and response to JSP page
    String url = "/index.jsp";
    RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url);
    dispatcher.forward(request, response);
}
}

//MailUtilLocal.java:

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

public class MailUtilLocal {

public static void sendMail(String to, String from, String subject, String body,   boolean bodyIsHTML)
        throws MessagingException {
    // 1 - get a mail session
    Properties props = new Properties();
    props.put("mail.transport.protocol", "smtp");
    props.put("mail.smtp.host", "localhost");
    props.put("mail.smtp.port", 25);
    Session session = Session.getDefaultInstance(props);
    session.setDebug(true);
    // 2 - create a message
    Message message = new MimeMessage(session);
    message.setSubject(subject);
    if (bodyIsHTML) {
        message.setContent(body, "text/html");
    } else {
        message.setText(body);
    }
    // 3 - address the message
    Address fromAddress = new InternetAddress(from);
    Address toAddress = new InternetAddress(to);
    message.setFrom(fromAddress);
    message.setRecipient(Message.RecipientType.TO, toAddress);
    // 4 - send the message
    Transport.send(message);
}
}

UserIO にメソッド addRecord がないためにエラーが発生し、その中に何があるべきかわからないため、これらの 2 行を削除しました。

String path = sc.getRealPath("/WEB-INF/EmailList.txt");
UserIO.addRecord(user, path);
4

1 に答える 1

0

ローカルの smtp サーバーを使用しているときに、SMTP サーバーがリモート サーバーと通信できないように、ISP がポート 25 をブロックすることがあります。

その場合にできることは、別のポートを使用して smtp サーバーからメールを送信するか、25 以外のポート (通常は 587 と 465) からの接続を受け入れるサード パーティのサービスを使用することです。

Sendgridmailjet、およびpostmarkappを見てください。これらは最もよく知られているプロバイダーの一部です。

于 2012-04-16T14:07:32.460 に答える