Javamail - отправка почты с локального хоста на внешние аккаунты
Необходимо отправлять электронную почту с локального хоста на внешние учетные записи, такие как Gmail и Yahoo. Прямо сейчас у меня есть программа, которая может отправлять и получать почту с моего локального домена через локальный почтовый сервер и запускать его, например (admin@ib-status.com <-> devteam@ib-status.com). Но проблема в том, что когда я пытаюсь отправить сообщение из локального домена в учетную запись gmail или Yahoo, я не могу это сделать, например (admin@ib-status.com -> myaccount@gmail.com). Нужна помощь в этом
PS. Я использую Hmailserver для почтового сервера
public class JMailer {
private static String HOSTNAME = "localhost";
private static String USERNAME = "admin";
private static String PASSWORD = "Mylocaldomainpassword";
public static void main(String[] args) {
try {
String to = "MygmailAccount@gmail.com";
String from = "admin@ib-status.com";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host",HOSTNAME);
Session session = Session.getInstance(properties, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(USERNAME, PASSWORD);
}
});
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("My Subject!");
message.setText("Here Goes My Message");
Transport.send(message);
System.out.println("Message Sending Completed");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
и моя ошибка из журнала Hmailserver ниже
"SMTPC" 4508 0 "2014-06-13 15:18:01.022" "TCP" "SMTPDeliverer - Сообщение 13 - Соединение не удалось: Имя хоста: 74.125.25.27, сообщение: Невозможно установить соединение, так как целевой компьютер активно отказал в этом "
я что-то здесь упустил? почему отказано в подключении к удаленной машине? и я не хочу использовать SMTP-сервер Gmail для отправки сообщения. все, что мне нужно, это я хочу, чтобы мой собственный SMTP-сервер работал для отправки и получения
2 ответа
Наконец, я смог взломать это, я протестировал на 2 серверах электронной почты, которые могут выполнить нашу работу,Apache james и hmailserver. Hmailserver довольно легко запустить и настроить, потому что он имеет графический интерфейс для этого.
HmailServer 5.4.2
1. Configure as per the documentation
2. Do not use localhost and make sure you change it in C:\Windows\System32\drivers\etc\hosts from "127.0.0.1 localhost" -> "127.0.0.1 example.com"
3. In add domain of hmailserver give "example.com"
4. In Domain created add accounts eg.user@example.com
5. under setting->protocold->smtp->delivery of email add "example.com"
Теперь запустите программу ниже, мы готовы.
Apache James apache-james-3.0-beta4
Почти так же, как и выше, но для этого не нужно настраивать графический интерфейс, это легкий почтовый сервер командной строки, который также работает в Linux.
примените ту же процедуру, но она имеет определенную командную строку для создания домена и учетных записей, перед этим вам необходимо войти в учетную запись администратора для создания пользователей.
препятствие, с которым вы столкнетесь при использовании Apache james, заключается в том, что он хорошо работает с 32-битной версией, но у него будет проблема запуска сервера для 64-битной версии, потому что "Wrapper.exe " используется в tanuki. где ваша не поддерживает 64-битную версию Wrapper.exe, поэтому мне пришлось, но пробную лицензию и добавить 64-битную Wrapper.exe и изменить james.bat.
Кроме этого он работает нормально.
package com.javabp.jmailer;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class JMailer {
public static void main(String[] args)
{
/***** CHANGE THESE FOUR VARIABLE VALUES TO REFLECT YOUR ENVIRONMENT ******/
String user = "user"; // Newly created user on JAMES Server
String password = "password"; // user password
String fromAddress = "user@example.com"; // newlycreateduser@localhost
String toAddress = "myaccount@gmail.com";
// Create a mail session
Properties properties = new Properties();
properties.put("mail.transport.protocol", "smtp");
properties.put("mail.smtp.host", "example.com");
properties.put("mail.smtp.port", "25");
properties.put("mail.smtp.username", user);
properties.put("mail.smtp.password", password);
Session session = Session.getDefaultInstance(properties, null);
try
{
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(fromAddress));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toAddress));
message.setSubject("Email From my Own Server");
message.setText("Test Mail sent from My Apache James Server!!");
Transport.send(message);
System.out.println("Email sent successfully");
}
catch (MessagingException e)
{
e.printStackTrace();
}
}
}
приведенный выше код работает как для Hmailserver, так и для Apache James.
Указатель для писем
* if your sending to external accounts be sure you see you mail at spam folders unless you have registered domain and hosted.
* once you send a mail to those server there is been chance your IP or domain will be blocked especially gmail. so it is better to have dynamic IP so you can restart your internet connection to send a mail again and also make sure you change your domain before sending even you changed your IP.
Попробуй это. Работает отлично! поставить свой идентификатор Gmail на sender@gmail.com
и ваш пароль Gmail на пароль.
import com.sun.mail.smtp.SMTPMessage;
import java.util.Properties;
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 SendmailSSl {
public static void main(String[] args) {
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "805");
Session session = Session.getDefaultInstance(props,new javax.mail.Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("sender@gmail.com","Password");
}
});
try {
SMTPMessage message = new SMTPMessage(session);
message.setFrom(new InternetAddress("sender@gmail.com"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse( "reciver@gmail.com" ));
message.setSubject("Testing Subject");
message.setText("This is Test mail");
message.setContent("This Is my First Mail Through Java");
message.setNotifyOptions(SMTPMessage.NOTIFY_SUCCESS);
int returnOption = message.getReturnOption();
System.out.println(returnOption);
Transport.send(message);
System.out.println("sent");
}
catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}