Сначала загрузите JavaMail API и убедитесь, что соответствующие файлы JAR находятся в вашем classpath.
Вот полный рабочий пример использования GMail.
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
public class Main {
private static String USER_NAME = "*****"; // GMail user name (just the part before "@gmail.com")
private static String PASSWORD = "********"; // GMail password
private static String RECIPIENT = "lizard.bill@myschool.edu";
public static void main(String[] args) {
String from = USER_NAME;
String pass = PASSWORD;
String[] to = { RECIPIENT }; // list of recipient email addresses
String subject = "Java send mail example";
String body = "Welcome to JavaMail!";
sendFromGMail(from, pass, to, subject, body);
}
private static void sendFromGMail(String from, String pass, String[] to, String subject, String body) {
Properties props = System.getProperties();
String host = "smtp.gmail.com";
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", pass);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props);
MimeMessage message = new MimeMessage(session);
try {
message.setFrom(new InternetAddress(from));
InternetAddress[] toAddress = new InternetAddress[to.length];
// To get the array of addresses
for( int i = 0; i < to.length; i++ ) {
toAddress[i] = new InternetAddress(to[i]);
}
for( int i = 0; i < toAddress.length; i++) {
message.addRecipient(Message.RecipientType.TO, toAddress[i]);
}
message.setSubject(subject);
message.setText(body);
Transport transport = session.getTransport("smtp");
transport.connect(host, from, pass);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
catch (AddressException ae) {
ae.printStackTrace();
}
catch (MessagingException me) {
me.printStackTrace();
}
}
}
Естественно, вы захотите сделать больше в catch
блоках, чем печатать трассировку стека, как я делал в приведенном выше примере кода. (Удалите catch
блоки, чтобы узнать, какие вызовы методов из API JavaMail генерируют исключения, чтобы вы могли лучше понять, как правильно их обрабатывать.)
Спасибо @jodonnel и всем, кто ответил. Я даю ему награду, потому что его ответ привел меня примерно на 95% к полному ответу.
smtp.gmail.com
. Подробности смотрите в разделе Настройка других почтовых клиентов .javax.mail.AuthenticationFailedException
и должен был явно включить «менее безопасные приложения» в своих настройках gmail: google.com/settings/security/lesssecureapps . Как только «менее безопасные приложения» были включены, код работалПримерно так (звучит так, как будто вам просто нужно сменить SMTP-сервер):
источник
message.setText("Welcome to JavaMail");
с этой строкой:message.setContent("<h1>Hello world</h1>", "text/html");
props.put("mail.smtp.starttls.enable", "true")
Другие люди имеют хорошие ответы выше, но я хотел бы добавить заметку о моем опыте здесь. Я обнаружил, что при использовании Gmail в качестве исходящего SMTP-сервера для моего веб-приложения Gmail позволяет мне отправлять только ~ 10 или около того сообщений, прежде чем ответить антиспамовым ответом, который мне нужно выполнить вручную, чтобы снова включить SMTP-доступ. Письма, которые я отправлял, не были спамом, но были "приветственными" письмами, когда пользователи регистрировались в моей системе. Итак, YMMV, и я бы не стал полагаться на Gmail для производственного веб-приложения. Если вы отправляете электронное письмо от имени пользователя, например, как установленное приложение для настольного компьютера (где пользователь вводит свои собственные учетные данные Gmail), возможно, у вас все в порядке.
Кроме того, если вы используете Spring, вот рабочая конфигурация для использования Gmail для исходящего SMTP:
источник
Несмотря на то, что этот вопрос закрыт, я хотел бы опубликовать встречное решение, но теперь использую Simple Java Mail (обертка с открытым исходным кодом JavaMail smtp):
источник
new Mailer(your login / your session, TransportStrategy.SMTP_TLS).sendMail(email);
Мой полный код, как показано ниже, работает хорошо:
источник
источник
Требуемый минимум:
источник
Решения с размещенным кодом могут вызывать проблемы, когда вам нужно настроить несколько сеансов SMTP где-нибудь в пределах одной JVM.
JavaMail FAQ рекомендует использовать
вместо того
потому что getDefault будет использовать только свойства, указанные при первом вызове. Все последующие использования экземпляра по умолчанию будут игнорировать изменения свойств.
См. Http://www.oracle.com/technetwork/java/faq-135477.html#getdefaultinstance.
источник
Это то, что я делаю, когда хочу отправить письмо с вложением, работает нормально. :)
источник
Простой способ - настроить / включить учетную запись gmail для доступа по протоколу POP3. Это позволит вам отправлять через обычный SMTP через серверы Gmail.
Тогда вы просто отправите через smtp.gmail.com (на порт 587)
источник
Привет, попробуй этот код ....
источник
Вот простой в использовании класс для отправки электронных писем с
Gmail
. Вам нужно добавитьJavaMail
библиотеку в ваш путь сборки или просто использоватьMaven
.Пример использования:
источник
Если вы хотите использовать Outlook с,
Javamail API
то используйтев качестве хоста для более и полный рабочий код Проверьте этот ответ .
источник
Добавленная стоимость:
Session.getInstance()
рекомендуется болееSession.getDefaultInstance()
источник