当前位置: 首页 > 知识库问答 >
问题:

如何从自定义gmail域发送邮件?

巢宏富
2023-03-14

我正在创建一个应用程序,我需要从自定义gmail域发送电子邮件。这是我的代码。

import java.time.LocalDateTime;
import java.util.Properties;
import java.util.Random;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

public class OTPMail {

     static char[] OTP(int len) 
        { 
            System.out.println("Generating OTP using random() : "); 
            // Using numeric values 
            String numbers = "0123456789"; 
            // Using random method 
            Random rndm_method = new Random(); 
            char[] otp = new char[len]; 
            for (int i = 0; i < len; i++) 
            { 
                // Use of charAt() method : to get character value 
                // Use of nextInt() as it is scanning the value as int 
                otp[i] = 
                 numbers.charAt(rndm_method.nextInt(numbers.length())); 
            } 
            return otp; 
        } 
        public static void main(String[] args) 
        { 
            int length = 4; 
            char[] OTP = OTP(length);
            System.out.print("Generated OTP is: ");
            System.out.println(OTP);
            String OTPString = String.valueOf(OTP);
            //send an email
            String messageForMail = "Your OTP for <company name>is: " + OTPString;

            //update admin mail and password here 


            final String username = "shop@<ownDomain>.com";
            final String password = "<passowrd>";

            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");

            Session session = Session.getInstance(props,
              new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(username, password);
                }
              });

            try {

                Message message = new MimeMessage(session);
                //message.setFrom(new InternetAddress("Kisna"));

                //update recipient mail id here.
                message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse("<mailId>@gmail.com"));
                message.setSubject("OTP");
                message.setText(messageForMail);

                Transport.send(message);

                System.out.println("OTP sent to mail");
                //check the time when mail is sent

            } catch (MessagingException e) {
                throw new RuntimeException(e);
            }

        } 

}

它给我的错误如下:

线程"main"中的异常java.lang.运行时异常:javax.mail.身份验证失败异常:534-5.7.14请通过534-5.7.14您的Web浏览器登录,然后重试。534-5.7.14在534 5.7.14https://support.google.com/mail/answer/7875480-v6sm5667641ywhh.55-gsmtp了解更多信息

在OTPMail。main(OTPMail.java:81)由:javax引起。邮政AuthenticationFailedException:534-5.7.14请通过您的web浏览器534-5.7.14登录,然后重试。534-5.7.14在534 5.7.14了解更多信息https://support.google.com/mail/answer/7875480-v6sm5667641ywh。55-gsmtp

ransport.java:194SMTPTransfer$Ajavax.mail.(SMTPTransport.send)ransport.java:124SMTPTail.main(SMTPTail.java:75)com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:685)javax.mail.Service.connect(Service.java:317)javax.mail.Service.connect(Service.java:176)javax.mail.Service.connect(Service.java:125)javax.mail.Transport.send0(Tcom.sun.mail.smtp.)uthenticator.authenticateTransport.java:826(Tcom.sun.mail.smtp.)OTPMransport.authenticate(OTPMransport.java:761)

当我对xxx@gmail.com邮件使用相同的代码时,它可以正常工作。但是当我把自定义域放在xxx@ownDomain.com时,它会给我提到的错误。关于如何解决这个问题,有什么想法吗?

共有1个答案

马魁
2023-03-14

要使用Java Mail发送电子邮件,您需要让不太安全的应用程序访问您的帐户。转到Google帐户-

 类似资料:
  • 问题 如何用Gmail发送邮件? 解法 安装和维护邮件服务器通常是沉闷乏味的。所以如果你有Gmail帐号,就可以使用Gmail做为SMTP服务器来发送邮件,我们唯一要做的就只是在web.config中指定Gmail的用户名和密码。 web.config.smtp_server = 'smtp.gmail.com' web.config.smtp_port = 587 web.config.smtp

  • 问题内容: 我正在使用JavaMail在Android应用程序中阅读邮件。我试图涵盖所有组合,即在“自定义服务器” /“ Gmail ID” /“ Live ID”上发送/接收的邮件。 从GMail WITH Attachment发送的某些邮件中出现问题。我可以收到附件,但是内容返回 这是用于接收和阅读消息的代码: 我对有问题的邮件的了解: 还返回名称,即以这种格式出现FirstName Last

  • 我试图发送电子邮件使用Nodejs包Nodemailer,但我无法更改从电子邮件到我的自定义域电子邮件。任何帮助都将不胜感激。这是我用来发送电子邮件的代码。

  • 我创建了一个子域sesmail.xxxx.com使用Cboard其中xxxx是我的域。 将其设置为Amazon SES的“来自域的邮件”,并将MX和TXT条目添加到我的DNS区域。亚马逊SES成功地验证了它。 我可以发送和接收电子邮件到外部域名,如gmail,雅虎等。然而,我不能发送电子邮件到我自己的域名。 打开通知,我发现邮件被此错误反弹- 外部我可以发送和接收没有问题。在内部,当我给自己发送电

  • 我已经在Gmail中的Check mail from other accounts(使用POP3)和Send mail as(使用TLS在587端口通过mail.mydomain.com安全连接发送邮件)下设置了我的cpanel电子邮件地址 看着Roundcube,我可以看到里面有收到的邮件,但没有发送的邮件——尽管Gmail是通过我的域服务器发送的。 有没有办法查看通过Gmail收发的邮件?

  • 我想将我的谷歌应用程序域上所有用户的签名设置为他们的姓名和职务。通过研究,我发现实现这一点的唯一自由方式是使用Gmail API。我只需使用网站上的快速入门指南,就可以获得该域名上所有用户的列表(包括所需信息、我想要设置签名的电子邮件地址、姓名、职务)https://developers.google.com/admin-sdk/directory/v1/quickstart/js. 在listU