簡體   English   中英

從 Java 程序發送驗證電子郵件 - AuthenticationError

[英]Sending Verification Email from Java Program - AuthenticationError

我正在做一個學校項目,我正在嘗試在創建帳戶時發送一封驗證電子郵件,但即使我的憑據正確,我也會不斷收到 AuthenticationError。

package classesMain;

import java.util.*;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendingEmail {

    private String email;
    private String code;
    
    
    public SendingEmail(String email, String code) {
        this.email = email;
        this.code = code;
        
    }
    
    
    public void send() {
        String fromEmail ="**MY EMAIL HERE**";
        String password="**MY PASSWORD HERE**";
        
        
        Properties props = new Properties();
        
    
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.port", "587");
        
        
        Authenticator signOn = new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(fromEmail,password);
            }
        };
        
        Session sess = Session.getInstance(props, signOn);
        
        
        
            MimeMessage message =  new MimeMessage(sess);
            try {
                message.setFrom(new InternetAddress(fromEmail));
                message.addRecipient(Message.RecipientType.TO, new InternetAddress(email));
                message.setSubject("Canadian Voting Portal- Email Verification Link");
                message.setText("Click on this link to verify your Canadian Voting Portal email."
                        + "If you did not request this email please call 1-888-888-8888"
                        + "\n\n Link: "+"http://localhost:8080/CapstoneProject/EmailServlet?email="+email+"&code="+code);
                
                Transport.send(message);
                
                System.out.println("Message Sent");
            } catch (MessagingException e) {
                // TODO Auto-generated catch block
                System.out.println("ERROR");
                e.printStackTrace();
            }
            
        
    }
}

錯誤日志:

MySQL JDBC Driver Registered!
Connection made to DB!
ERROR
javax.mail.AuthenticationFailedException: 535-5.7.8 Username and Password not accepted. Learn more at
535 5.7.8  https://support.google.com/mail/?p=BadCredentials bm35-20020a05620a19a300b006b61b2cb1d2sm57362qkb.46 - gsmtp

    at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:965)
    at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:876)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:780)
    at javax.mail.Service.connect(Service.java:388)
    at javax.mail.Service.connect(Service.java:246)
    at javax.mail.Service.connect(Service.java:195)
    at javax.mail.Transport.send0(Transport.java:254)
    at javax.mail.Transport.send(Transport.java:124)
    at classesMain.SendingEmail.send(SendingEmail.java:54)
    at servlets.CreateAccountServlet.doPost(CreateAccountServlet.java:103)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:834)

我已經嘗試了一些不同的 Authenticator 變體,但似乎沒有任何效果! 謝謝!

對於處於相同情況的任何人,我將我的電子郵件硬編碼到密碼驗證器和電子郵件中。 然后,我不得不為“郵件”和“Windows 計算機”獲取應用程序密碼,無論出於何種原因,它也必須進行硬編碼,否則它將不起作用.. 不知道為什么,但那是我的解決方案! 謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM