Как настроить почтовый сервер для использования с JavaMail? - PullRequest
16 голосов
/ 02 июня 2010

Я пытаюсь работать с кодом ниже:

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 и активации.jar. Но я не могу понять, как мне настроить его с почтовым сервером. Какой почтовый сервер я должен использовать? Смогу ли я отправить электронное письмо, используя указанный выше код? Каковы требования к почтовому серверу? Как мне это настроить?

1 Ответ

28 голосов
/ 02 июня 2010

Для начала вам нужен SMTP-сервер . Необходимо иметь возможность отправлять электронные письма. Точно так же, как вам нужен HTTP-сервер для обслуживания веб-сайта. Очевидно, у вас уже есть HTTP-сервер (с сервлет-контейнером), но у вас еще не настроен SMTP-сервер.

Вы можете использовать SMTP-сервер, связанный с вашей собственной существующей учетной записью электронной почты, такой как ваш провайдер или общедоступные почтовые ящики, такие как Gmail, Yahoo и т. Д. Подробную информацию о подключении SMTP можно найти в их документации. Обычно вам просто нужно знать имя хоста и номер порта . имя пользователя / пароль такие же, как и у вашей учетной записи электронной почты.

Имя хоста и номер порта должны быть установлены как свойства SMTP для JavaMail:

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);

С учётной записью вашего интернет-провайдера или общедоступных почтовых ящиков вы, тем не менее, можете использовать собственный адрес в поле From электронного письма и, как правило, также количество электронных писем, которые вам разрешено отправлять через определенные промежутки времени. Если вы хотите обойти это, вам нужно установить собственный SMTP-сервер, например Apache James , основанный на Java, или Microsoft Exchange и так далее.

В конце концов, я предлагаю вам пройти курс JavaMail , чтобы вы лучше поняли.

...