Java远程调用邮件服务器,实现邮件…

来源:互联网 发布:淘宝海外版网址 编辑:程序博客网 时间:2024/05/26 19:20
写这篇文章的背景是公司Android客户端需要实现一个功能,实现类似于密码找回或者用户注册完发送一个邮件给用户的功能,当然这些逻辑客户端只负责请求自己的服务端,自己的服务端再去请求邮件服务器。

邮件服务器使用的Apache的James,Java写的开源的,而且方便调用。远程调用使用的是Java Mail的API。

首先我们需要把James这个邮件服务器跑起来,官网下载地址:http://james.apache.org/,下载先来之后直接解压,直接运行bin\run.bat。出现如下图所示说明运行OK了。


如果运行不成功,可能是你的JDK或者环境变量没有配置好,这个我就不说了。

运行起来之后,会在apps\james\SAR-INF这个目录下生成一个config.xml文件,这就是邮件服务器的配置文件。打开它,修改一些配置:

1.修改localhost,改成你自己的服务器域名,比如:support@zhangyuan123.com

2.修改这些,也是改成自己的

    zhangyuan123.com

3.修改dnsserver,这是为了可以发外网邮件,查看DNS地址使用ipconfig/all,然后在配置文件中dnsserver节点下加入server地址,比如:

[html] viewplaincopy
  1. <</span>dnsserver>  
  2.       <</span>servers>  
  3.            
  4.            
  5.            
  6.         <</span>server>114.114.114.114</</span>server>   
  7.         <</span>server>8.8.8.8</</span>server>  
  8.       </</span>servers>  
  9.         
  10.         
  11.       <</span>autodiscover>false</</span>autodiscover>  
  12.       <</span>authoritative>false</</span>authoritative>  
  13.   
  14.         
  15.       <</span>maxcachesize>50000</</span>maxcachesize>  
  16.    </</span>dnsserver>  
4.找到C:\Windows\System32\drivers\etc\host文件,其中加入127.0.0.1  zhangyuan123.com

重新启动邮件服务器。

下面就添加一个用户到邮件服务器,James是使用telnet进行命令行操作的。win7默认没有打开telnet服务,可以搜一下如何打开。然后在命令行输入telnet zhangyuan123.com4555,输入用户名root,密码root。添加一个用户使用命令:adduser admin admin,其他命令我就不说了。

添加完了之后我们就开始使用客户端模仿调用服务器发送一封邮件。

[java] viewplaincopy
  1. package org.sunchao;  
  2.   
  3. import java.io.IOException;  
  4. import java.util.Properties;  
  5.   
  6. import javax.mail.Authenticator;  
  7. import javax.mail.Folder;  
  8. import javax.mail.Message;  
  9. import javax.mail.MessagingException;  
  10. import javax.mail.PasswordAuthentication;  
  11. import javax.mail.Session;  
  12. import javax.mail.Store;  
  13. import javax.mail.internet.InternetAddress;  
  14. import javax.mail.internet.MimeMessage;  
  15. import javax.mail.internet.MimeUtility;  
  16.   
  17. public class Mail  
  18.     // String host "smtp.163.com"; // 163的smtp服务器  
  19.     // 本机smtp服务器  
  20.     private static final String HOST "zhangyuan123.com" 
  21.     // 邮件发送人的邮件地址  
  22.     private static final String FROM "admin@" HOST;  
  23.     // 邮件接收人的邮件地址  
  24.     private static final String TO "test@qq.com" 
  25.     // 发件人的邮件帐户  
  26.     private static final String USERNAME "admin" 
  27.     // 发件人的邮件密码  
  28.     private static final String PASSWORD "admin" 
  29.   
  30.     public static void main(String[] args)  
  31.         Mail.sendMail();  
  32.         // Mail.getMail();  
  33.      
  34.   
  35.       
  36.     public static void sendMail()  
  37.         // 创建Properties 对象  
  38.         Properties props System.getProperties();  
  39.         // 添加smtp服务器属性  
  40.         props.put("mail.smtp.host"HOST);  
  41.         props.put("mail.smtp.auth""true");  
  42.   
  43.         // 创建邮件会话  
  44.         Session session Session.getDefaultInstance(props,  
  45.                 new Authenticator()  
  46.                     @Override  
  47.                     public PasswordAuthentication getPasswordAuthentication()  
  48.                         return new PasswordAuthentication(USERNAME, PASSWORD);  
  49.                      
  50.                 });  
  51.         try  
  52.             // 定义邮件信息  
  53.             MimeMessage message new MimeMessage(session);  
  54.             message.setFrom(new InternetAddress(FROM));  
  55.             message.addRecipient(Message.RecipientType.TO, new InternetAddress(  
  56.                     TO));  
  57.             message.setSubject("I hava my own mail server");  
  58.             message  
  59.                     .setText("From now, you have your own mail server, congratulation!");  
  60.             // 发送消息  
  61.             session.getTransport("smtp").send(message);  
  62.             // Transport.send(message); //也可以这样创建Transport对象发送  
  63.             System.out.println("SendMail Process Over!");  
  64.         catch (MessagingException e)  
  65.             e.printStackTrace();  
  66.          
  67.      
  68.   
  69.       
  70.     public static void getMail()  
  71.         String host "localhost" 
  72.         final String username "admin" 
  73.         final String password "admin" 
  74.         // 创建Properties 对象  
  75.         Properties props new Properties();  
  76.   
  77.         // 创建邮件会话  
  78.         Session session Session.getDefaultInstance(props,  
  79.                 new Authenticator()  
  80.                     @Override  
  81.                     public PasswordAuthentication getPasswordAuthentication()  
  82.                         return new PasswordAuthentication(username, password);  
  83.                      
  84.                 });  
  85.         try  
  86.             // 获取邮箱的pop3存储  
  87.             Store store session.getStore("pop3");  
  88.             store.connect(host, username, password);  
  89.             // 获取inbox文件  
  90.             Folder folder store.getFolder("INBOX");  
  91.             folder.open(Folder.READ_ONLY); // 打开,打开后才能读取邮件信息  
  92.             // 获取邮件消息  
  93.             Message message[] folder.getMessages();  
  94.             for (int 0message.length; n; i++)  
  95.                 System.out.println(i ": " message[i].getFrom()[0"\t"  
  96.                         message[i].getSubject());  
  97.                 try  
  98.                     message[i].writeTo(System.out);  
  99.                 catch (IOException e)  
  100.                     e.printStackTrace();  
  101.                  
  102.              
  103.             // 关闭资源  
  104.             folder.close(false);  
  105.             store.close();  
  106.         catch (MessagingException e)  
  107.             e.printStackTrace();  
  108.          
  109.         System.out.println("GetMail Process Over!");  
  110.      
  111.   
  112.     // 邮件主题中文字符转换  
  113.     public static String transferChinese(String strText)  
  114.         try  
  115.             strText MimeUtility.encodeText(new String(strText.getBytes(),  
  116.                     "GB2312"), "GB2312""B");  
  117.         catch (Exception ex)  
  118.             ex.printStackTrace();  
  119.          
  120.         return strText;  
  121.      
  122.  
把上面代码中qq邮箱地址换成自己的就行。最后run一把就OK了。但是QQ邮箱自身有过滤机制,它会认为来自zhangyuan123.com的邮件是垃圾邮件,你需要设置一下白名单:

添加域名白名单:


再发每一次,QQ邮箱就可以收到了。

对于腾讯的过滤,如果不让他过滤,我估计得交钱给腾讯了,其他的163的,新浪的大家也可以试一下。


转至:http://blog.csdn.net/sunchaoenter/article/details/9280815

0 0
原创粉丝点击