Отправка электронной почты на Java
Отправка электронной почты с помощью Java-приложения очень проста, но сначала нужно установить JavaMail API и Java Activation Framework (JAF) на вашем компьютере.
- Вы можете скачать последнюю версию с сайта Java:JavaMail, откройте веб-страницу, и справа есть ссылкаЗагрузки, нажмите её, чтобы скачать.
- Вы можете скачать последнюю версию с сайта Java:JAF (версия 1.1.1)。
Вы также можете использовать ссылку для скачивания, предоставленную этим сайтом:
-
JavaMail mail.jar 1.4.5
-
-
JAF (версия 1.1.1) activation.jar
-
Скачайте и распакуйте эти файлы. В только что созданном каталоге верхнего уровня вы найдёте несколько jar-файлов для этих двух приложений. Вам нужно поместить файлыmail.jarиactivation.jarв ваш CLASSPATH.
Если вы используете сторонний почтовый сервер, например SMTP-сервер QQ, можете обратиться к полному примеру аутентификации пользователя в конце статьи.
Отправка простого электронного письма
Ниже приведён пример отправки простого электронного письма. Предполагается, что ваш локальный хост уже подключён к сети.
Код файла SendEmail.java:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail
{
public static void main(String [] args)
{
String to = "[email protected]";
String from = "[email protected]";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
message.setSubject("Это строка темы!");
message.setText("Это фактическое сообщение");
Transport.send(message);
System.out.println("Сообщение успешно отправлено....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Скомпилируйте и запустите эту программу, чтобы отправить простое электронное письмо:
$ java SendEmail
Sent message successfully....
Если вы хотите отправить электронное письмо нескольким получателям, используйте следующие методы, чтобы указать несколько идентификаторов получателей:
void addRecipients(Message.RecipientType type,
Address[] addresses)
throws MessagingException
Ниже приведено описание параметров:
type:Должно быть установлено в TO, CC или BCC, где CC означает копию (carbon copy), а BCC — скрытую копию (blind carbon copy). Пример:Message.RecipientType.TO
addresses:Это массив идентификаторов электронной почты. При указании идентификаторов электронной почты вам потребуется использовать метод InternetAddress().
Отправка HTML-письма
Ниже приведён пример отправки HTML-письма. Предполагается, что ваш локальный хост уже подключён к сети.
Он очень похож на предыдущий пример, за исключением того, что мы используем метод setContent() со вторым параметром "text/html", чтобы задать содержимое и указать, что должно отправляться HTML-содержимое.
Код файла SendHTMLEmail.java:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendHTMLEmail
{
public static void main(String [] args)
{
String to = "[email protected]";
String from = "[email protected]";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
message.setSubject("Это строка темы!");
message.setContent("<h1>Это фактическое сообщение</h1>",
"text/html" );
Transport.send(message);
System.out.println("Сообщение успешно отправлено....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Скомпилируйте и запустите эту программу, чтобы отправить HTML-письмо:
$ java SendHTMLEmail
Sent message successfully....
Отправка электронного письма с вложениями
Ниже приведён пример отправки электронного письма с вложениями. Предполагается, что ваш локальный хост уже подключён к сети.
Код файла SendFileEmail.java:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendFileEmail
{
public static void main(String [] args)
{
String to = "[email protected]";
String from = "[email protected]";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
message.setSubject("Это строка темы!");
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("Это тело сообщения");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
String filename = "file.txt";
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart );
Transport.send(message);
System.out.println("Сообщение успешно отправлено....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Скомпилируйте и запустите вашу программу, чтобы отправить электронное письмо с вложениями.
$ java SendFileEmail
Sent message successfully....
Раздел аутентификации пользователя
Если вам нужно указать имя пользователя и пароль для почтового сервера для аутентификации пользователя, вы можете сделать это с помощью следующих настроек:
props.put("mail.smtp.auth", "true");
props.setProperty("mail.user", "myuser");
props.setProperty("mail.password", "mypwd");
Остальная часть механизма отправки электронной почты остаётся такой же, как выше.
Пример отправки электронной почты с аутентификацией по имени пользователя/паролю:
В этом примере в качестве примера используется почтовый сервер QQ. Вам нужно войти в серверную часть вашего почтового ящика QQ и включить службу POP3/SMTP в разделе "Настройки" => "Учетные записи", как показано на рисунке ниже:

Почтовый ящик QQ задаёт пароль путём генерации кода авторизации:

Код Java выглядит следующим образом:
Код файла SendEmail2.java:
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendEmail2
{
public static void main(String [] args)
{
String to = "[email protected]";
String from = "[email protected]";
String host = "smtp.qq.com";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
properties.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(properties,new Authenticator(){
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("[email protected]", "код авторизации почтового ящика QQ");
}
});
try{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
message.setSubject("Это строка темы!");
message.setText("Это фактическое сообщение");
Transport.send(message);
System.out.println("Сообщение успешно отправлено....от example.com");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Другие расширения