How can I send an email by Java application using GMail, Yahoo, or Hotmail?
Как я могу отправить электронное письмо с помощью Java-приложения, используя GMail, Yahoo или Hotmail?
Возможно ли отправить электронное письмо из моего Java-приложения, используя учетную запись GMail? Я настроил почтовый сервер моей компании с Java-приложением для отправки электронной почты, но это не отключит его при распространении приложения. Принимаются ответы с любым из вариантов использования Hotmail, Yahoo или GMail.
Переведено автоматически
Ответ 1
Сначала загрузите JavaMail API и убедитесь, что соответствующие jar-файлы находятся в вашем classpath.
privatestaticStringUSER_NAME="*****"; // GMail user name (just the part before "@gmail.com") privatestaticStringPASSWORD="********"; // GMail password privatestaticStringRECIPIENT="lizard.bill@myschool.edu";
publicstaticvoidmain(String[] args) { Stringfrom= USER_NAME; Stringpass= PASSWORD; String[] to = { RECIPIENT }; // list of recipient email addresses Stringsubject="Java send mail example"; Stringbody="Welcome to JavaMail!";
Естественно, вам захочется сделать больше в catch блоках, чем распечатать трассировку стека, как я сделал в примере кода выше. (Удалите catch блоки, чтобы увидеть, какие вызовы методов из JavaMail API вызывают исключения, чтобы вы могли лучше видеть, как правильно их обрабатывать.)
Спасибо @jodonnel и всем остальным, кто ответил. Я награждаю его, потому что его ответ привел меня примерно на 95% к полному ответу.
Ответ 2
Что-то вроде этого (звучит так, как будто вам просто нужно сменить свой SMTP-сервер):
Stringhost="smtp.gmail.com"; Stringfrom="user name"; Propertiesprops= System.getProperties(); props.put("mail.smtp.host", host); props.put("mail.smtp.user", from); props.put("mail.smtp.password", "asdfgh"); props.put("mail.smtp.port", "587"); // 587 is the port number of yahoo mail props.put("mail.smtp.auth", "true");
InternetAddress[] to_address = newInternetAddress[to.length]; inti=0; // To get the array of addresses while (to[i] != null) { to_address[i] = newInternetAddress(to[i]); i++; } System.out.println(Message.RecipientType.TO); i = 0; while (to_address[i] != null) {
message.addRecipient(Message.RecipientType.TO, to_address[i]); i++; } message.setSubject("sending in a group"); message.setText("Welcome to JavaMail"); // alternately, to send HTML mail: // message.setContent("<p>Welcome to JavaMail</p>", "text/html"); Transporttransport= session.getTransport("smtp"); transport.connect("smtp.mail.yahoo.co.in", "user name", "asdfgh"); transport.sendMessage(message, message.getAllRecipients()); transport.close();
Ответ 3
У других людей есть хорошие ответы выше, но я хотел добавить сюда заметку о своем опыте. Я обнаружил, что при использовании Gmail в качестве исходящего SMTP-сервера для моего веб-приложения Gmail позволяет мне отправлять только ~ 10 или около того сообщений, прежде чем отвечать ответом на защиту от нежелательной почты, который я должен выполнить вручную, чтобы повторно включить SMTP-доступ. Электронные письма, которые я отправлял, не были спамом, а были "приветственными" электронными письмами веб-сайта, когда пользователи регистрировались в моей системе. Итак, YMMV, и я бы не стал полагаться на Gmail в качестве рабочего веб-приложения. Если вы отправляете электронное письмо от имени пользователя, например, с помощью установленного настольного приложения (где пользователь вводит свои собственные учетные данные Gmail), возможно, все в порядке.
Кроме того, если вы используете Spring, вот рабочая конфигурация для использования Gmail для исходящего SMTP:
Хотя этот вопрос закрыт, я хотел бы опубликовать встречное решение, но теперь с использованием Simple Java Mail (оболочка JavaMail smtp с открытым исходным кодом):
finalEmailemail=newEmail();
Stringhost="smtp.gmail.com"; Integerport=587; Stringfrom="username"; Stringpass="password"; String[] to = {"to@gmail.com"};
email.setFromAddress("", from); email.setSubject("sending in a group"); for( int i=0; i < to.length; i++ ) { email.addRecipient("", to[i], RecipientType.TO); } email.setText("Welcome to JavaMail");
newMailer(host, port, from, pass).sendMail(email); // you could also still use your mail session instead newMailer(session).sendMail(email);