猿问

无法发送电子邮件,除非需要身份验证

我写了一个简单的Java程序,它使用Java邮件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");

    }


}

电子邮件实用程序类:


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邮件发送邮件?


如果不是,我做错了什么?


POPMUISE
浏览 196回答 2
2回答

白衣染霜花

这取决于谁在运行服务器。见 https://support.google.com/a/answer/176600?hl=en&vid=0-974788924023-1554173451081;特别是标有“Gmail SMTP 服务器”(您正在使用)的列。谷歌明确表示,您必须进行身份验证才能使用该服务器。如果不这样做,则会显示此错误消息。

富国沪深

曾几何时,您可以使用任何邮件服务器将电子邮件发送到您想要的任何电子邮件地址。然后是垃圾邮件。垃圾邮件发送者也可以使用任何邮件服务器向任何电子邮件地址发送电子邮件 - 作为邮件服务器运营商,您不希望垃圾邮件发送者使用您的服务器发送电子邮件(因为操作服务器会花费您的钱,因为您的邮件服务器可能会因垃圾邮件而被列入黑名单)。所以今天大多数邮件服务器都要求你提供身份验证(用于将电子邮件发送到您想要的任何电子邮件地址)或仅允许向邮件服务器运营商托管的电子邮件地址发送电子邮件谷歌甚至有两个不同的邮件服务器:一个需要身份验证的,可用于将电子邮件发送到您想要的任何电子邮件地址(即服务器smtp.gmail.com)一个不需要身份验证,只能用于向Gmail或G Suite用户发送电子邮件(即服务器)aspmx.l.google.com)可能是您的来源可以追溯到不需要身份验证的时间,或者您的来源中的邮件服务器仅用于将邮件发送到邮件服务器上托管的地址。无论哪种方式 - 如果你想使用服务器向任何地址发送邮件,你必须进行身份验证(或者说服谷歌他们应该允许你 - 而且只有你 - 在没有身份验证的情况下发送电子邮件,但是:谷歌怎么知道正是你试图发送邮件?smtp.gmail.com
随时随地看视频慕课网APP

相关分类

Java
我要回答