Я пытаюсь отправить электронное письмо с использованием Java. Из прочитанного я обнаружил, что если я использую gmail в качестве хоста, я могу сделать это бесплатно, и это должно работать, это правильно.
Итак, у меня есть мой код ниже, и я пытаюсь отправить электронное письмо от себя на электронные письма моих друзей (электронные письма в моем коде ниже были изменены для конфиденциальности), но я получаю исключение при отправке / передаче адрес электронной почты (в строке Transport.send (msg);)
Вывод / исключение:
javax.mail.MessagingException: не удалось подключиться к узлу SMTP: smtp.gmail.com, порт: 25;
Вложенное исключение:
java.net.ConnectException: истекло время ожидания соединения: соединение
Должно было получиться: false
Что вы думаете, я делаю не так?
/**
* SimpleAuthenticator is used to do simple authentication
* when the SMTP server requires it.
*/
class SMTPAuthenticator extends javax.mail.Authenticator
{
public PasswordAuthentication getPasswordAuthentication()
{
String username = "myaccount@gmail.com";
String password = "xxxxxxx";
return new PasswordAuthentication(username, password);
}
}
public class SendEmail
{
public SendEmail()
{
}
public static boolean sendEmail( String from, String to[], String subject, String body )
{
try
{
boolean debug = false;
// Set the host smtp address
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com" ); // "smtp.jcom.net");
props.put("mail.smtp.auth", "true");
// create some properties and get the default Session
// Session session = Session.getDefaultInstance(props, null);
Authenticator auth = new SMTPAuthenticator();
Session session = Session.getDefaultInstance(props, auth);
session.setDebug(debug);
// create a message
Message msg = new MimeMessage(session);
// set the from and to address
InternetAddress addressFrom = new InternetAddress(from);
msg.setFrom(addressFrom);
InternetAddress[] addressTo = new InternetAddress[to.length];
for (int i = 0; i < to.length; i++)
{
addressTo[i] = new InternetAddress(to[i]);
}
msg.setRecipients(Message.RecipientType.TO, addressTo);
// Optional : You can also set your custom headers in the Email if
// you Want
msg.addHeader("MyHeaderName", "myHeaderValue");
// Setting the Subject and Content Type
msg.setSubject(subject);
msg.setContent(body, "text/plain");
System.out.println( "1" );
Transport.send(msg);
System.out.println( "2" );
}
catch (Exception e)
{
System.out.println( e );
return false;
}
return true;
}
public static void main(String args[])
{
boolean res = SendEmail.sendEmail( "myaccount@gmail.com", new String[] {"x@y.com", "y@x.com.au"},
"Test", "Did it work?" );
System.out.println( "Should have succeeded: " + res );
}
}