有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javacom。太阳邮政smtp。SMTPAddressFailedException:收件人地址被拒绝:需要身份验证

我正在使用以下代码,但收到的错误消息如下- 运行:

javax.mail.SendFailedException: Invalid Addresses;
  nested exception is:
        com.sun.mail.smtp.SMTPAddressFailedException: 530 5.7.0 : Recipient address rejected: Authentication Required

        at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1607)
        at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:887)
        at javax.mail.Transport.send0(Transport.java:191)
        at javax.mail.Transport.send(Transport.java:120)
        at MailClient.sendMail(MailClient.java:55)
        at MailClient.main(MailClient.java:94)
Caused by: com.sun.mail.smtp.SMTPAddressFailedException: 530 5.7.0 : Recipient address rejected: Authentication Required

        at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1505)
        ... 5 more

/**
 *
 * @author sachin
 */
import javax.mail.*;
 import javax.mail.internet.*;
 import javax.activation.*;
 import java.io.*;
 import java.util.Properties;

 public class MailClient
 {


     public void sendMail(String mailServer, String from, String to,
                             String subject, String messageBody
                             ) throws MessagingException, AddressException
     {
         // Setup mail server
         Properties props = System.getProperties();
         props.put("mail.smtp.host", mailServer);

         // Get a mail session
         Session session = Session.getDefaultInstance(props, null);

         // Define a new mail message
         Message message = new MimeMessage(session);
         message.setFrom(new InternetAddress(from));
         message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
         message.setSubject(subject);

         // Create a message part to represent the body text
         BodyPart messageBodyPart = new MimeBodyPart();
         messageBodyPart.setText(messageBody);

         //use a MimeMultipart as we need to handle the file attachments
         Multipart multipart = new MimeMultipart();

         //add the message body to the mime message
         multipart.addBodyPart(messageBodyPart);

         // add any file attachments to the message
         // addAtachments(attachments, multipart);

         // Put all message parts in the message
         message.setContent(multipart);

         // Send the message
         Transport.send(message);


     }

     protected void addAtachments(String[] attachments, Multipart multipart)
                     throws MessagingException, AddressException
     {
         for(int i = 0; i<= attachments.length -1; i++)
         {
             String filename = attachments[i];
             MimeBodyPart attachmentBodyPart = new MimeBodyPart();

             //use a JAF FileDataSource as it does MIME type detection
             DataSource source = new FileDataSource(filename);
             attachmentBodyPart.setDataHandler(new DataHandler(source));

             //assume that the filename you want to send is the same as the
             //actual file name - could alter this to remove the file path
             attachmentBodyPart.setFileName(filename);

             //add the attachment
             multipart.addBodyPart(attachmentBodyPart);
         }
     }

     public static void main(String[] args)
     {
         try
         {
             MailClient client = new MailClient();
             String server="smtp.bsgroup.in";
             String from="sachinsingh@bsgroup.in";
             String to = "sachinsingh@bsgroup.in";
             String subject="Test Mail";
             String message="Testing Mail";
          //  String[] filenames =
//{"c:\somefile.txt"};

             client.sendMail(server,from,to,subject,message);
         }
         catch(Exception e)
         {
             e.printStackTrace(System.out);
         }

     }
 }

共 (3) 个答案

  1. # 1 楼答案

    public class SendEmailServiceImpl extends Authenticator implements SendEmailService {
    
    @Autowired
    private TemplateEngine templateEngine;
    
    private final static String id = "sachinsingh@gmail.com";
    private final static String pw = "!@#$5678";
    
    private PasswordAuthentication pa;
    
    public SendEmailServiceImpl() {
        pa = new PasswordAuthentication(id, pw);
    }
    
    public PasswordAuthentication getPasswordAuthentication() {
        return pa;
    }
    
    @Override
    public void SendEmail(Person person, HttpServletRequest req, HttpServletResponse res) {
        String link = "";
    
        String contextPath = "http://" + req.getServerName() + ":" + req.getServerPort();
    
    
        WebContext ctx = new WebContext(req, res, req.getServletContext(),
                req.getLocale());
    
    
        Properties p = System.getProperties();
        p.put("mail.smtp.starttls.enable", "true");
        p.put("mail.smtp.host", "smtp.gmail.com");
        p.put("mail.smtp.auth", "true");
        p.put("mail.smtp.port", "587");
    
        Authenticator auth = new SendEmailServiceImpl();
        Session session = Session.getDefaultInstance(p, auth);
        MimeMessage msg = new MimeMessage(session);
    
        try {
            msg.setSentDate(new Date());
            InternetAddress from = new InternetAddress();
            from = new InternetAddress(id);
    
            msg.setFrom(from);
            InternetAddress to = new InternetAddress(person.getEmail());
            msg.setRecipient(Message.RecipientType.TO, to);
    
            link = contextPath + req.getContextPath() + "/checkToken/" + person.getToken();
            ctx.setVariable("tokenLink", link);
            String template = templateEngine.process("email/email_join", ctx);
            msg.setSubject("subject", "UTF-8");
            msg.setText(template, "UTF-8");
    
            msg.setHeader("content-Type", "text/html");
    
            javax.mail.Transport.send(msg);
            System.out.println("send email");
    
        } catch (AddressException addr_e) {
            addr_e.printStackTrace();
        } catch (MessagingException msg_e) {
            msg_e.printStackTrace();
        }
    }
    
  2. # 2 楼答案

          public class SendEmailService {
                        private static final org.slf4j.Logger logger = LoggerFactory.getLogger(SendEmailService.class);
    
              public static void main(String args[]){
            sendingConfirmationMail.("sachinsingh@bsgroup.in","sachinsingh@bsgroup.in","password"
    ,"smtp.gmail.com","465");
    //incase of zoho host,change into smtp.zoho.com
    
            }
                        public static void sendingConfirmationMail(String fromEmail, String userName, String password,
                     String toEmail, String sender_host,
                                String ssl_port) throws AddressException, MessagingException {
                            try {
                                // protocol properties
                            Properties props = System.getProperties();
                            props.setProperty("mail.smtps.host", sender_host);
                            props.setProperty("mail.smtp.port", ssl_port);
                            props.setProperty("mail.smtp.startssl.enable", "true");
                            props.setProperty("mail.smtps.auth", "true");
                            // close connection upon quit being sent
                            props.put("mail.smtps.quitwait", "false");
                            // Properties props=MailProperties(sender_host, ssl_port);
                            Session session = Session.getInstance(props, null);
    
                                final MimeMessage msg = new MimeMessage(session);
                                // set recipients and content
                                msg.setFrom(new InternetAddress(fromEmail));
                                msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail, false));
    
                                msg.setSubject("Test Mail");
    
                                msg.setContent("Testing Mail", "text/html; charset=utf-8");
                                msg.setSentDate(new Date());
    
                            Transport transport = session.getTransport("smtps");
                            transport.connect(sender_host, userName, password);
                            transport.sendMessage(msg, msg.getAllRecipients());
                            transport.close();
                            } catch (MessagingException e) {
    
                            }
                        }
    
  3. # 3 楼答案

    您收到的错误消息告诉您,您连接到的SMTP服务器需要进行身份验证,然后才能使用它发送电子邮件,并且您尚未向其提供任何身份验证详细信息

    有关SMTP服务器需要身份验证时如何发送电子邮件的示例,请参见here (Internet Archive)