文档章节

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

gavin
 gavin
发布于 2015/07/29 13:55
字数 1003
阅读 97
收藏 2

[原文转自] http://blog.csdn.net/sunchaoenter/article/details/9280815


写这篇文章的背景是公司Android客户端需要实现一个功能,实现类似于密码找回或者用户注册完发送一个邮件给用户的功能,当然这些逻辑客户端只负责请求自己的服务端,自己的服务端再去请求邮件服务器。

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

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


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

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

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

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

<servernames autodetect="false" autodetectIP="false">

    <servername>zhangyuan123.com</servername>

</servernames>

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


[html] view plaincopy

  1. <dnsserver>  

  2.       <servers>  

  3.          <!--Enter ip address of your DNS server, one IP address per server -->  

  4.          <!-- element. -->  

  5.          <!-- 

  6.           <server>127.0.0.1</server> 

  7.          -->  

  8.         <server>114.114.114.114</server>   

  9.         <server>8.8.8.8</server>  

  10.       </servers>  

  11.       <!-- Change autodiscover to false if you would like to turn off autodiscovery -->  

  12.       <!-- and set the DNS servers manually in the <servers> section -->  

  13.       <autodiscover>false</autodiscover>  

  14.       <authoritative>false</authoritative>  

  15.   

  16.       <!-- Maximum number of entries to maintain in the DNS cache -->  

  17.       <maxcachesize>50000</maxcachesize>  

  18.    </dnsserver>  

4.找到C:\Windows\System32\drivers\etc\host文件,其中加入127.0.0.1   zhangyuan123.com


重新启动邮件服务器。

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

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


[java] view plaincopy

  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.      * 发送邮件 

  37.      */  

  38.     public static void sendMail() {  

  39.         // 创建Properties 对象  

  40.         Properties props = System.getProperties();  

  41.         // 添加smtp服务器属性  

  42.         props.put("mail.smtp.host", HOST);  

  43.         props.put("mail.smtp.auth""true");  

  44.   

  45.         // 创建邮件会话  

  46.         Session session = Session.getDefaultInstance(props,  

  47.                 new Authenticator() {  

  48.                     @Override  

  49.                     public PasswordAuthentication getPasswordAuthentication() {  

  50.                         return new PasswordAuthentication(USERNAME, PASSWORD);  

  51.                     }  

  52.                 });  

  53.         try {  

  54.             // 定义邮件信息  

  55.             MimeMessage message = new MimeMessage(session);  

  56.             message.setFrom(new InternetAddress(FROM));  

  57.             message.addRecipient(Message.RecipientType.TO, new InternetAddress(  

  58.                     TO));  

  59.             message.setSubject("I hava my own mail server");  

  60.             message  

  61.                     .setText("From now, you have your own mail server, congratulation!");  

  62.             // 发送消息  

  63.             session.getTransport("smtp").send(message);  

  64.             // Transport.send(message); //也可以这样创建Transport对象发送  

  65.             System.out.println("SendMail Process Over!");  

  66.         } catch (MessagingException e) {  

  67.             e.printStackTrace();  

  68.         }  

  69.     }  

  70.   

  71.     /** 

  72.      * 接收邮件 

  73.      */  

  74.     public static void getMail() {  

  75.         String host = "localhost";  

  76.         final String username = "admin";  

  77.         final String password = "admin";  

  78.         // 创建Properties 对象  

  79.         Properties props = new Properties();  

  80.   

  81.         // 创建邮件会话  

  82.         Session session = Session.getDefaultInstance(props,  

  83.                 new Authenticator() {  

  84.                     @Override  

  85.                     public PasswordAuthentication getPasswordAuthentication() {  

  86.                         return new PasswordAuthentication(username, password);  

  87.                     }  

  88.                 });  

  89.         try {  

  90.             // 获取邮箱的pop3存储  

  91.             Store store = session.getStore("pop3");  

  92.             store.connect(host, username, password);  

  93.             // 获取inbox文件  

  94.             Folder folder = store.getFolder("INBOX");  

  95.             folder.open(Folder.READ_ONLY); // 打开,打开后才能读取邮件信息  

  96.             // 获取邮件消息  

  97.             Message message[] = folder.getMessages();  

  98.             for (int i = 0, n = message.length; i < n; i++) {  

  99.                 System.out.println(i + ": " + message[i].getFrom()[0] + "\t"  

  100.                         + message[i].getSubject());  

  101.                 try {  

  102.                     message[i].writeTo(System.out);  

  103.                 } catch (IOException e) {  

  104.                     e.printStackTrace();  

  105.                 }  

  106.             }  

  107.             // 关闭资源  

  108.             folder.close(false);  

  109.             store.close();  

  110.         } catch (MessagingException e) {  

  111.             e.printStackTrace();  

  112.         }  

  113.         System.out.println("GetMail Process Over!");  

  114.     }  

  115.   

  116.     // 邮件主题中文字符转换  

  117.     public static String transferChinese(String strText) {  

  118.         try {  

  119.             strText = MimeUtility.encodeText(new String(strText.getBytes(),  

  120.                     "GB2312"), "GB2312""B");  

  121.         } catch (Exception ex) {  

  122.             ex.printStackTrace();  

  123.         }  

  124.         return strText;  

  125.     }  

  126. }  


© 著作权归作者所有

共有 人打赏支持
gavin
粉丝 11
博文 31
码字总数 19330
作品 0
浦东
私信 提问
Jenkins 教程(一)实现自动化打包及邮件通知

个人不喜欢装腔作势一堆专业术语放上去,让大多数人看不懂来提升逼格(所谓的专家),所以我简单的介绍jenkins是干啥的。本文使用jenkins,就是让它把git仓库里的东西取出来,然后在jenkins容器...

FantJ
2018/05/26
0
0
Java 发送邮件实现(JavaMail 和 Spring 实现)

Java 实现邮件的发送,使用 JavaMail 和 Spring 实现 一、使用 JavaMail JavaMail 是 Java 处理电子邮件相关的编程接口,但是没有被加在标准的Java开发工具包中(Java Development Kit),所...

非摩尔根
01/17
0
0
如何让Loadrunner或Jmeter发送邮件报告

版权声明:本文为博主原创文章,未经博主允许不得转载。欢迎访问我的博客 https://blog.csdn.net/smooth00/article/details/79358195 Loadrunner支持Java Vuser,而Jmeter本身就是基于Java开...

smooth00
2018/02/24
0
0
Java 发送qq邮件基础和封装

前文摘自 菜鸟教程 :http://www.runoob.com/java/java-sending-email.html 使用Java应用程序发送 E-mail 十分简单,但是首先你应该在你的机器上安装 JavaMail API 和Java Activation Frame...

fantj666
2018/03/18
0
0
开源免费的web mail搭建太麻烦了?来这里看看

postfix+mysql+Dovecot+extmail估计是目前国内最大的开源免费的邮件组合了,号称黄金搭档,但是介个对于javaer来说有点难了,因为extmail是基于php的,php需要apache,这些在linux里面配置起来...

一号男嘉宾
2012/03/18
6.3K
5

没有更多内容

加载失败,请刷新页面

加载更多

数据库技术-Mysql主从复制与数据备份

数据库技术-Mysql 主从复制的原理: MySQL中数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”...

须臾之余
昨天
12
0
Git远程仓库——GitHub的使用(一)

Git远程仓库——GitHub的使用(一) 一 、 Git远程仓库 由于你的本地仓库和GitHub仓库之间的传输是通过SSH加密的,所以需要一下设置: 步骤一、 创建SSH key 在用户主目录下,看看有没有.ss...

lwenhao
昨天
4
0
SpringBoot 整合

springBoot 整合模板引擎 SpringBoot 整合Mybatis SpringBoot 整合redis SpringBoot 整合定时任务 SpringBoot 整合拦截器...

细节探索者
昨天
1
0
第二个JAVA应用

第二个JAVA应用 方法一:配置文件: # cd /usr/local/tomcat/conf/# vim server.xml</Host> <Host name="www.wangzb.cc" appBase="/data/wwwroot/www.wangzb.cc" //引用所......

wzb88
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部