电子邮件系统 4----JavaMail SMTP服务器发送邮件程序示例 .

  1. /** 
  2.  * JavaMail SMTP服务器发送邮件程序示例 
  3.  * 扮演SMTP服务器角色与邮件客户端软件最大的区别就是: 
  4.  * SMTP服务器需要解析不同接收人邮件地址主机名对应的SMTP服务器主机名 
  5.  * ,同时不需要验证 
  6.  * 注意:由于条件的限制,此程序是运行不成功的,原因见下面的注释说明 
  7.  */  
  8. package com.labci.javamail.test;  
  9. import java.util.Date;  
  10. import java.util.Properties;  
  11. import javax.mail.Message.RecipientType;  
  12. import javax.mail.Message;  
  13. import javax.mail.MessagingException;  
  14. import javax.mail.Session;  
  15. import javax.mail.Transport;  
  16. import javax.mail.internet.AddressException;  
  17. import javax.mail.internet.InternetAddress;  
  18. import javax.mail.internet.MimeMessage;  
  19. import javax.naming.NamingException;  
  20. import javax.naming.directory.Attributes;  
  21. import javax.naming.directory.DirContext;  
  22. import javax.naming.directory.InitialDirContext;  
  23. /** 
  24.  * @author Bill Tu 
  25.  * @since May 27, 2011(12:21:41 PM) 
  26.  * 
  27.  */  
  28. public class SMTPSenderTest {  
  29.      public static String  getSMTPHost(String domain,String dnsServer) throws NamingException{  
  30.           DirContext ctx=new InitialDirContext();  
  31.           Attributes mxAttrs=null;  
  32.           if(null != dnsServer){  
  33.               mxAttrs=ctx.getAttributes("dns://"+dnsServer+"/"+domain,new String[]{"MX"});  
  34.           }else{  
  35.               mxAttrs=ctx.getAttributes("dns:/"+domain,new String[]{"MX"});  
  36.           }  
  37.             
  38.           String mx=(String) mxAttrs.get("MX").get();  
  39.           String smtpServerName=mx.substring(mx.indexOf(" ")+1);  
  40.           return smtpServerName;  
  41.      }  
  42.        
  43.      private static Message getMessage(Session session) throws AddressException, MessagingException{  
  44.           String from="[email protected]";  
  45.           String subject="hello";  
  46.           String content="this is content";  
  47.             
  48.           MimeMessage msg=new MimeMessage(session);  
  49.           msg.setFrom(new InternetAddress(from));  
  50.           msg.setSubject(subject);  
  51.           msg.setText(content);  
  52.           msg.setSentDate(new Date());  
  53.             
  54.           return msg;  
  55.         
  56.      }  
  57.        
  58.      private static Session getSession(){  
  59.           Properties props=new Properties();  
  60.           //设置ehlo命令中的主机名,若检测到主机名与其IP地址一致,则认为这时的发送方是SMTP服务器,就不需要验证;否则就是邮件客户端软件,则需要验证。   
  61.           props.put("mail.smtp.localhost""mail.digu.com");  
  62.           props.put("mail.smtp.auth""false");   
  63.           props.put("mail.smtp.port""25");   
  64.           Session session=Session.getDefaultInstance(props);  
  65.           session.setDebug(true);  
  66.           return session;  
  67.      }  
  68.        
  69.      @SuppressWarnings("static-access")  
  70.      private static void sendEmail(Message message,Session session,String to)   
  71.        throws AddressException, MessagingException, NamingException{  
  72.           message.setRecipients(RecipientType.TO, InternetAddress.parse(to));  
  73.           message.saveChanges();  
  74.             
  75.           Transport transport=session.getTransport("smtp");  
  76.             
  77.           String domain=to.substring(to.indexOf("@")+1);  
  78.           String host=getSMTPHost(domain,null);  
  79.             
  80.           transport.connect(host, nullnull);  
  81.           transport.send(message, message.getRecipients(Message.RecipientType.TO));  
  82.             
  83.           transport.close();  
  84.      }  
  85.       
  86.      public static void main(String []args)   
  87.       throws AddressException, MessagingException, NamingException{  
  88.           String []to=new String[]{"[email protected]","[email protected]"};  
  89.           Session session=getSession();  
  90.           Message msg=getMessage(session);  
  91.           for(String email:to){  
  92.               sendEmail(msg,session,email);  
  93.           }  
  94.      }  
  95. }  

你可能感兴趣的:(javamail)