2010-07-15 60 views
6

我使用下面的代碼,但流汗錯誤消息原樣 運行:com.sun.mail.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="[email protected]"; 
      String to = "[email protected]"; 
      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

您收到錯誤消息告訴您已連接的SMTP服務器需要進行身份驗證,然後才能使用它發送電子郵件,並且您沒有提供任何身份驗證詳細信息。

有關如何在SMTP服務器需要驗證時發送電子郵件的示例,請參閱here (Internet Archive)

1
public class SendEmailServiceImpl extends Authenticator implements SendEmailService { 

@Autowired 
private TemplateEngine templateEngine; 

private final static String id = "[email protected]"; 
private final static String pw = "[email protected]#$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(); 
    } 
} 
+0

添加一些說明,以及。 – 2016-04-27 04:06:51

0
 public class SendEmailService { 
        private static final org.slf4j.Logger logger = LoggerFactory.getLogger(SendEmailService.class); 

      public static void main(String args[]){ 
     sendingConfirmationMail.("[email protected]","[email protected]","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) { 

         } 
        } 
相關問題