Я пытаюсь отправить электронное письмо с помощью Java:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail {
public static void main(String [] args) {
// Recipient's email ID needs to be mentioned.
String to = "abcd@gmail.com";
// Sender's email ID needs to be mentioned
String from = "web@gmail.com";
// Assuming you are sending email from localhost
String host = "localhost";
// Get system properties
Properties properties = System.getProperties();
// Setup mail server
properties.setProperty("mail.smtp.host", host);
// Get the default Session object.
Session session = Session.getDefaultInstance(properties);
try{
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
// Set Subject: header field
message.setSubject("This is the Subject Line!");
// Now set the actual message
message.setText("This is actual message");
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Я получаю сообщение об ошибке:
javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;
nested exception is:java.net.ConnectException: Connection refused: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1706)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:525)
Подойдет ли этот код для отправки электронной почты?
Ответы:
Следующий код очень хорошо работает с SMTP-сервером Google. Вам необходимо указать свое имя пользователя и пароль Google.
Обновление от 11 декабря 2015 г.
Имя пользователя + пароль больше не рекомендуется. Это связано с
Google выпустил Gmail API - https://developers.google.com/gmail/api/?hl=en . Мы должны использовать метод oAuth2 вместо имени пользователя + пароля.
Вот фрагмент кода для работы с Gmail API.
GoogleMail.java
Вот фрагмент кода, чтобы создать авторизованный сервис Gmail через oAuth2.
Utils.java
Чтобы обеспечить удобный способ аутентификации oAuth2, я использовал JavaFX, чтобы отобразить следующий диалог ввода
Ключ для отображения удобного для пользователя диалога oAuth2 можно найти в MyAuthorizationCodeInstalledApp.java и SimpleSwingBrowser.java.
источник
Send
вместо этого вызываются методы,send
но это полезный класс. Есть мысли о последствиях для безопасности хранения пароля Gmail в коде?Для меня работал следующий код.
источник
Необходимые файлы jar
Нажмите здесь - Как добавить внешние банки
источник
Короткий ответ - нет.
Длинный ответ - нет, поскольку код зависит от наличия SMTP-сервера, запущенного на локальном компьютере и прослушивающего порт 25. SMTP-сервер (технически MTA или агент передачи почты) отвечает за связь с почтовым агентом пользователя. (MUA, который в данном случае является процессом Java) для получения исходящих писем.
Теперь MTA обычно отвечают за получение почты от пользователей определенного домена. Таким образом, для домена gmail.com именно почтовые серверы Google отвечают за аутентификацию почтовых агентов пользователей и, следовательно, передачу почты в ящики входящих сообщений на серверах GMail. Я не уверен, доверяет ли GMail открытым почтовым серверам ретрансляции, но выполнить аутентификацию от имени Google, а затем ретранслировать почту на серверы GMail, конечно, непросто.
Если вы прочитали FAQ JavaMail по использованию JavaMail для доступа к GMail , вы заметите, что имя хоста и порт указывают на серверы GMail, а не на localhost. Если вы собираетесь использовать локальный компьютер, вам необходимо выполнить ретрансляцию или пересылку.
Вам, вероятно, потребуется глубоко понять протокол SMTP, если вы хотите чего-то добиться, когда дело касается SMTP. Вы можете начать со статьи в Википедии о SMTP , но для дальнейшего продвижения потребуется программирование с использованием SMTP-сервера.
источник
Для отправки писем вам нужен SMTP-сервер. Есть серверы, которые вы можете установить локально на свой компьютер, или вы можете использовать один из множества онлайн-серверов. Один из наиболее известных серверов - это Google:
Я только что успешно протестировал разрешенные конфигурации Google SMTP, используя первый пример из Simple Java Mail :
Обратите внимание на различные порты и транспортные стратегии (которые обрабатывают все необходимые свойства за вас).
Любопытно, что Google также требует TLS на порту 25, хотя инструкции Google сказано иное .
источник
Прошло довольно много времени с тех пор, как это было опубликовано. Но по состоянию на 13 ноября 2012 г. я могу проверить, что порт 465 все еще работает.
Обратитесь к ответу GaryM на этом форуме . Надеюсь, это поможет еще нескольким людям.
источник
Следующий код работает очень хорошо. Попробуйте это как приложение java с javamail-1.4.5.jar.
источник
Ну, нет, не без изменения некоторых частей, так как вы получаете ошибку. В настоящее время вы пытаетесь отправить почту через SMTP-сервер, работающий на локальном хосте, но у вас его нет, поэтому файл
ConnectException
.Предполагая, что код в порядке (я действительно не проверял), вам придется либо запустить локальный SMTP-сервер, либо использовать (удаленный) (от вашего интернет-провайдера).
Что касается кода, вы можете найти образцы в пакете загрузки JavaMail, как указано в FAQ :
источник
Попробуйте это. у меня это работает хорошо. Убедитесь, что перед отправкой электронной почты вам необходимо предоставить доступ для менее безопасного приложения в вашей учетной записи Gmail. Так что перейдите по следующей ссылке и попробуйте этот Java-код.
Активируйте Gmail для менее безопасного приложения
Вам необходимо импортировать в свой проект файл javax.mail.jar и файл activate.jar.
Это полный код для отправки электронной почты на java.
источник
Вот рабочее решение, братан. Это гарантировано.
xyz@gmail.com
Откройте эту ссылку ниже:
https://support.google.com/accounts/answer/6010255?hl=en
Вот мой код:
источник
Я разместил свой рабочий Java-класс gmail на pastebin для вашего обзора, обратите особое внимание на метод "startSessionWithTLS", и вы можете настроить JavaMail для обеспечения той же функциональности. http://pastebin.com/VE8Mqkqp
источник
Ваш код работает, помимо настройки соединения с SMTP-сервером. Вам понадобится работающий почтовый (SMTP) сервер, чтобы отправлять вам электронную почту.
Вот ваш измененный код. Я закомментировал ненужные части и изменил создание сеанса так, чтобы он использовал аутентификатор. Теперь просто найдите SMPT_HOSTNAME, USERNAME и PASSWORD, которые вы хотите использовать (обычно их предоставляет ваш интернет-провайдер).
Я всегда делаю это так (используя удаленный SMTP-сервер, который я знаю), потому что запуск локального почтового сервера не так уж и прост в Windows (очевидно, это довольно просто в Linux).
источник
Действительно, 465 работает, и исключение, которое вы получаете, может быть связано с неоткрытым SMTP-портом 25. По умолчанию номер порта равен 25. Однако вы можете настроить его с помощью почтового агента, доступного как открытый исходный код - Mercury
Для простоты просто используйте следующую конфигурацию, и все будет в порядке.
Для большего: посмотрите полный рабочий пример с нуля здесь
источник
У меня такое же исключение, как и у вас. Причина в том, что на вашем компьютере отсутствует запущенный сервер smpt (поскольку ваш хост - localhost). Если вы используете Windows 7, у него нет SMTP-сервера. поэтому вам нужно будет загрузить, установить и настроить домен и создать учетные записи. Я использовал hmailserver как smtp-сервер, установленный и настроенный на моем локальном компьютере. https://www.hmailserver.com/download
источник
Здесь вы можете найти полный и очень простой класс java для отправки электронных писем с использованием учетной записи Google (gmail),
Отправка электронной почты с использованием java и учетной записи Google
Он использует следующие свойства
источник