Не удается отправить письмо без проверки подлинности - PullRequest
0 голосов
/ 02 апреля 2019

Я написал простую Java-программу, которая использует Java Mail API для отправки электронной почты.

 public static void main(String[] args) {

        System.out.println("SimpleEmail Start");

        String smtpHostServer = "smtp.gmail.com";
        String emailID = "xxxxxx@hotmail.com";

        Properties props = System.getProperties();

        props.put("mail.smtp.host", smtpHostServer);
        props.put("mail.smtp.starttls.enable", "true");





        Session session = Session.getInstance(props, null);

        EmailUtil.sendEmail(session, emailID,"SimpleEmail Testing Subject", "SimpleEmail Testing Body");
    }

}

Класс EmailUtil:

public class EmailUtil {


    /**
     * Utility method to send simple HTML email
     * @param session
     * @param toEmail
     * @param subject
     * @param body
     */
    public static void sendEmail(Session session, String toEmail, String subject, String body){
        try
        {
            MimeMessage msg = new MimeMessage(session);
            //set message headers
            msg.addHeader("Content-type", "text/HTML; charset=UTF-8");
            msg.addHeader("format", "flowed");
            msg.addHeader("Content-Transfer-Encoding", "8bit");

            msg.setFrom(new InternetAddress("no_reply@example.com", "NoReply-JD"));

            msg.setReplyTo(InternetAddress.parse("no_reply@example.com", false));

            msg.setSubject(subject, "UTF-8");

            msg.setText(body, "UTF-8");

            msg.setSentDate(new Date());

            msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail, false));
            System.out.println("Message is ready");
            Transport.send(msg);

            System.out.println("EMail Sent Successfully!!");
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }





}

В этой реализации сказано, что я неМне нужен какой-либо пароль, поэтому я попробовал, и он говорит мне:

com.sun.mail.smtp.SMTPSendFailedException: 530-5.5.1 Authentication Required

Я получил этот код с онлайн-ресурсов, и из того, что я прочитал, он должен быть в состоянии отправить без аутентификации.

Итак, мой вопрос: мне всегда нужно задавать имя пользователя и пароль для отправки почты с использованием почты JAVA?

Если нет, что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 02 апреля 2019

Это зависит от того, кто запускает сервер.

См. https://support.google.com/a/answer/176600?hl=en&vid=0-974788924023-1554173451081;, в частности, столбец с пометкой «Gmail SMTP-сервер» (который вы используете).Google явно говорит, что вы должны пройти аутентификацию, чтобы использовать этот сервер.В противном случае вы получите это сообщение об ошибке.

1 голос
/ 02 апреля 2019

Давным-давно вы могли использовать любой почтовый сервер для отправки писем на любой адрес электронной почты, который вы хотели.

А потом пришел СПАМ .Спаммеры также могут использовать любой почтовый сервер для отправки электронной почты на любой адрес электронной почты - и как оператор почтового сервера вы не хотите, чтобы спаммеры использовали ваш сервер для отправки электронных писем (потому что работа сервера стоит ваших денег, потому что ваш почтовый сервер может попасть в черный список дляспам).

Так что сегодня большинство почтовых серверов требуют, чтобы вы

  • либо предоставляли аутентификацию (для отправки писем на любой адрес электронной почты, который вы хотите)
  • или разрешены толькоотправлять электронные письма на адреса электронной почты, размещенные оператором почтового сервера

У Google даже есть два разных почтовых сервера:

  • , для которых требуется аутентификация, которые можно использовать для отправки писемна любой адрес электронной почты, который вы хотите (это сервер smtp.gmail.com)
  • , который не требует аутентификации и может использоваться только для отправки электронных писем пользователям Gmail или G Suite (это сервер *)1021 *)

Возможно, ваш источник восходит ко времени, когда аутентификация не проводиласьили почтовый сервер в вашем источнике использовался только для отправки почты на адреса, размещенные на почтовом сервере.

В любом случае - если вы хотите использовать сервер smtp.gmail.com для отправки почты на любой адресВы должны подтвердить подлинность (или убедить Google, что они должны разрешить вам - и только вам - отправлять электронные письма без проверки подлинности, но затем: как Google узнает, что именно вы пытаетесь отправлять письма?)

...