当我发送邮件时发现错误 javax.mail.AuthenticationFailedException: 535 身份验证数据不正确

问题描述 投票:0回答:3

我通过以下代码发送电子邮件时遇到以下错误

javax.mail.AuthenticationFailedException: 535 Incorrect authentication data

我的代码可能有什么问题。

public class SendMail {

    public static boolean sendHTMLMail(final String from, final String password, String senderName, String sub, String msg, String[] to) {

        String host = "mail.xxxx.org";
        MimeMultipart multipart = new MimeMultipart();
        MimeBodyPart bodypart = new MimeBodyPart();
        Properties p = new Properties();
        p.setProperty("mail.smtp.host", host);
        p.put("mail.smtp.port", 587);
        p.put("mail.smtp.auth", "true");

        try {
            Session session = Session.getInstance(p, new javax.mail.Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(from, password);
                }
            });
            Transport transport = session.getTransport("smtp");
            MimeMessage mimeMessage = new MimeMessage(session);
            mimeMessage.setFrom(new InternetAddress("" + senderName + "<" + from + ">"));
            InternetAddress[] toAddress = new InternetAddress[to.length];
            for (int i = 0; i < to.length; i++) {
                toAddress[i] = new InternetAddress(to[i]);
            }

            for (InternetAddress toAddres : toAddress) {
                mimeMessage.addRecipient(Message.RecipientType.TO, toAddres);
            }
            bodypart.setContent(msg, "text/html; charset=\"utf-8\"");
            multipart.addBodyPart(bodypart);
            mimeMessage.setSubject(sub);
            mimeMessage.setContent(multipart);
            transport.connect(host, from, password);
            mimeMessage.saveChanges();
            Transport.send(mimeMessage);
            transport.close();
            return true;
        } catch (MessagingException me) {
            me.printStackTrace();
        }
        return false;
    }
}
java email
3个回答
0
投票

我在第一次尝试时遇到了同样的问题...这个代码可以在我的本地网络和 Gmail 中发送...你尝试一下

package SendMail;

import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 * @author [email protected]
 *
 */

public class CrunchifyJavaMailExample {

    //static Properties mailServerProperties;
   // static Session getMailSession;
  //  static MimeMessage generateMailMessage;

    public static void main(String args[]) throws AddressException, MessagingException {
        generateAndSendEmail();
        System.out.println("\n\n ===> Your Java Program has just sent an Email successfully. Check your email..");
    }

    public static void generateAndSendEmail() throws AddressException, MessagingException {

        String smtpHost="put Your Host";
        String smtpUser="UserName in full @somthing.com";
        String smtpPassword="your password";
        int smtpPort=25;//Port may vary.Check yours smtp port
        // Step1
        System.out.println("\n 1st ===> setup Mail Server Properties..");
        Properties mailServerProperties = System.getProperties();
        //mailServerProperties.put("mail.smtp.ssl.trust", smtpHost);
//        mailServerProperties.put("mail.smtp.starttls.enable", true); // added this line
        mailServerProperties.put("mail.smtp.host", smtpHost);
        mailServerProperties.put("mail.smtp.user", smtpUser);
        mailServerProperties.put("mail.smtp.password", smtpPassword);
        mailServerProperties.put("mail.smtp.port", smtpPort);

        mailServerProperties.put("mail.smtp.starttls.enable", "true");
        System.out.println("Mail Server Properties have been setup successfully..");

        // Step2
        System.out.println("\n\n 2nd ===> get Mail Session..");
        Session getMailSession = Session.getDefaultInstance(mailServerProperties, null);
        MimeMessage generateMailMessage = new MimeMessage(getMailSession);
        generateMailMessage.setFrom (new InternetAddress (smtpUser));
        generateMailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
        generateMailMessage.addRecipient(Message.RecipientType.CC, new InternetAddress("[email protected]"));
        generateMailMessage.setSubject("Greetings from Crunchify..");
        String emailBody = "2.Test email by Crunchify.com JavaMail API example. " + "<br><br> Regards, <br>Crunchify Admin";
        generateMailMessage.setContent(emailBody, "text/html");
        System.out.println("Mail Session has been created successfully..");

        // Step3
        System.out.println("\n\n 3rd ===> Get Session and Send mail");
        Transport transport = getMailSession.getTransport("smtp");

        // Enter your correct gmail UserID and Password
        // if you have 2FA enabled then provide App Specific Password
        transport.connect(smtpHost,smtpPort, smtpUser, smtpPassword);
        transport.sendMessage(generateMailMessage, generateMailMessage.getAllRecipients());
        transport.close();
    }
}

0
投票

只需输入:

p.setProperty("mail.smtps.host", host);
p.put("mail.smtps.port", 587);
p.put("mail.smtps.auth", "true");

而不是:

p.setProperty("mail.smtp.host", host);
p.put("mail.smtp.port", 587);
p.put("mail.smtp.auth", "true");

0
投票

也许您想考虑切换到开源 Simple Java Mail,它可以消除有关设置哪些属性等的猜测工作。

这是一个应该适合您的示例:

public class SendMail {

    public static boolean sendHTMLMail(final String from, final String password, String senderName, String sub, String msg, String[] to) {
        try {
            Mailer mailer = MailerBuilder
                .withSMTPServer("mail.xxxx.org", 587, from, password)
                .withTransportStrategy(TransportStrategy.SMTP)
                .buildMailer();

            EmailPopulatingBuilder emailBuilder = EmailBuilder.startingBlank()
                .from(senderName, from)
                .withSubject(sub)
                .withHTMLText(msg);

            for (String recipient : to) {
                emailBuilder.to(recipient);
            }

            mailer.sendMail(emailBuilder.buildEmail());
            return true;
        } catch (MailException e) {
            e.printStackTrace();
            return false;
        }
    }
}

您可以尝试其他传输策略之一,以防万一这不起作用,具体取决于您的服务器的限制。

© www.soinside.com 2019 - 2024. All rights reserved.