1、 邮件开发涉及到的一些基本概念(表示只要代码着急拿来用的童鞋直接翻到后面第2点:))

在简单粗暴的拿出样例之前,需要先简介一下邮件服务的一些基本概念,以期更好的理解本文。在一个目前常用的邮件系统中,收发邮件功能的实现是通过不同的协议实现的,收邮件一般采用POP(PostOffice Protocol)协议,即邮局协议,目前所用的版本是3,所以人们通常称之为POP3,。该协议定义了接收邮件的机制,并规定每个用户只能有一个邮箱的支持。占用端口一般为25;发邮件一般采用SMTP (Simple Mail Transfer Protocol)协议,即简单邮件传输协议,它定义了发送电子邮件的机制,通过它程序将和您的公司或因特网服务供应商的(InternetService Provider's,ISP's)SMTP 服务器通信。SMTP 服务器可将消息中转至接收方 SMTP 服务器,以便最终让用户经由 POP 或IMAP 获得。占用端口一般为110;通过程序实现这两个协议,我们就可以构建自己企业的邮件收发系统。

1.1、邮件服务器和电子邮箱

  要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。例如现在Internet很多提供邮件服务的厂商:sina、sohu、163等等他们都有自己的邮件服务器。

  这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。

  电子邮箱(E-Mail地址)的获得需要在邮件服务器上进行申请,确切地说,电子邮箱其实就是用户在邮件服务器上申请的一个账户,用户在邮件服务器上申请了一个帐号后,邮件服务器就会为这个账号分配一定的空间,用户从而可以使用这个帐号以及空间发送电子邮件和保存别人发送过来的电子邮件。

1.2、邮件传输协议

1.2.1、SMTP协议

  用户连接上邮件服务器之后,要想给它发送一封电子邮件,需要遵循一定的通讯规则,SMTP协议就是用来定义这种通讯规则的。因此,我们通常也把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。

1.2.2、POP3协议

  同样,用户若想从邮件服务器管理的电子邮箱当中接收一封电子邮件话,它连上邮件服务器后,也要遵循一定的通讯格式,POP3协议就是用来定义这种通讯格式的。因此,我们通常也把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。

1.3、电子邮件的发送和接收过程

  通过一张图来说明一封邮件的发送和接收过程,如下图所示:

简单说一下这个邮件收发过程:

  1、xdp@sohu.com 用户写好一封Email发送到sohu的Smtp服务器。对应于上图的步骤①

  2、sohu的Smtp服务器开始处理xdp@sohu.com 用户的请求,它会根据收件人的地址判断,当前收件人是不是自己管辖的用户,如果是,就直接将Email存放到为该收件人的分配的邮箱空间当中。sohu的Smtp服务器判断收件人地址发现,这一封Email的收件人gacl@sina.com 是Sina的邮件服务器管理的,于是又将Email转发给Sina的Smtp服务器。对应于上图的步骤②

  3、Sina的Smtp服务器开始处理sohu的Smtp服务器发送过来的Email,Sina的Smtp服务器根据收件人的地址判断,发现收件人自己管辖的用户,于是就直接将Email存放到为gacl@sina.com 用户的分配的邮箱空间当中。对应于上图的步骤③。

  4、xdp@sohu.com 用户将邮件发出去之后,就通知gacl@sina.com 用户去收取。gacl@sina.com 用户于是就连接上Sina的POP3服务器收取邮件,对应于上图的步骤④。

  5、POP3服务器从gacl@sina.com 用户的邮箱空间当中取出Email,对应于步骤⑤。

  6、POP3服务器将取出来的Email发给gacl@sina.com 用户,对应于步骤⑥。

2.根据代码demo样例简单上手

2.1 邮件服务器 MailServer.java (具体看代码注释)

import java.util.List;
import java.util.Properties;import javax.mail.Authenticator;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;/*** 简单邮件发送器,可单发,群发。* * @author humingfeng* */
public class MailServer {/*** 发送邮件的props文件*/private final transient Properties props = System.getProperties();/*** 邮件服务器登录验证*/private transient MailAuthenticator authenticator;/*** 邮箱session*/private transient Session session;/*** 初始化邮件发送器* * @param smtpHostName*            SMTP邮件服务器地址* @param username*            发送邮件的用户名(地址)* @param password*            发送邮件的密码*/public MailServer(final String smtpHostName, final String username,final String password) {init(username, password, smtpHostName);}/*** 初始化邮件发送器* * @param username*            发送邮件的用户名(地址),并以此解析SMTP服务器地址* @param password*            发送邮件的密码*/public MailServer(final String username, final String password) {// 通过邮箱地址解析出smtp服务器,对大多数邮箱都管用final String smtpHostName = "smtp." + username.split("@")[1];init(username, password, smtpHostName);}/*** 初始化* * @param username*            发送邮件的用户名(地址)* @param password*            密码* @param smtpHostName*            SMTP主机地址*/private void init(String username, String password, String smtpHostName) {// 初始化propsprops.put("mail.smtp.auth", "true");props.put("mail.smtp.host", smtpHostName);if(smtpHostName==null)props.put("mail.smtp.host", smtpHostName);// 验证authenticator = new MailAuthenticator(username, password);// 创建sessionsession = Session.getInstance(props, authenticator);}/*** 发送邮件* * @param recipient*            收件人邮箱地址* @param subject*            邮件主题* @param content*            邮件内容* @throws AddressException* @throws MessagingException*/public void send(String recipient, String subject, Object content)throws AddressException, MessagingException {// 创建mime类型邮件final MimeMessage message = new MimeMessage(session);// 设置发信人message.setFrom(new InternetAddress(authenticator.getUsername()));// 设置收件人if(recipient!=null&&recipient.indexOf(";")!=-1){//多收件人String[] rec = recipient.split(";");int len = rec.length;InternetAddress[] iad = new InternetAddress[len];for(int i=0; i<len; i++){iad[i] =  new InternetAddress(rec[i]);}message.setRecipients(RecipientType.TO, iad);}else{//单收件人message.setRecipient(RecipientType.TO, new InternetAddress(recipient));}// 设置主题message.setSubject(subject);// 设置邮件内容message.setContent(content.toString(), "text/html;charset=utf-8");
//      message.setText(content.toString(), "GBK");// 发送Transport.send(message);}/*** 群发邮件* * @param recipients*            收件人们* @param subject*            主题* @param content*            内容* @throws AddressException* @throws MessagingException*/public void send(List<String> recipients, String subject, Object content)throws AddressException, MessagingException {// 创建mime类型邮件final MimeMessage message = new MimeMessage(session);// 设置发信人message.setFrom(new InternetAddress(authenticator.getUsername()));// 设置收件人们final int num = recipients.size();InternetAddress[] addresses = new InternetAddress[num];for (int i = 0; i < num; i++) {addresses[i] = new InternetAddress(recipients.get(i));}message.setRecipients(RecipientType.TO, addresses);// 设置主题message.setSubject(subject);// 设置邮件内容message.setContent(content.toString(), "text/html;charset=utf-8");// 发送Transport.send(message);}/*** 服务器邮箱登录验证* * @author MZULE* */public class MailAuthenticator extends Authenticator {/*** 用户名(登录邮箱)*/private String username;/*** 密码*/private String password;/*** 初始化邮箱和密码* * @param username*            邮箱* @param password*            密码*/public MailAuthenticator(String username, String password) {this.username = username;this.password = password;}String getPassword() {return password;}@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(username, password);}String getUsername() {return username;}public void setPassword(String password) {this.password = password;}public void setUsername(String username) {this.username = username;}}
}

2.2 怎么简单使用

这是简单的使用邮件服务器来发送邮件,欢迎大家讨论,对于初学可以参考一下
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;/*** @author **/
public class MailSender {/*** 服务邮箱*/private static MailServer mailServer = null;//private static String userName;private static String password;private static String stmp;/*** @param userName the userName to set*/public void setUserName(String userName) {if(MailSender.userName==null)MailSender.userName = userName;}/*** @param password the password to set*/public void setPassword(String password) {if(MailSender.password==null)MailSender.password = password;}/*** @param stmp the stmp to set*/public void setStmp(String stmp) {if(MailSender.stmp==null)MailSender.stmp = stmp;}/*** 使用默认的用户名和密码发送邮件* @param recipient* @param subject* @param content* @throws MessagingException * @throws AddressException */public static void sendHtml(String recipient, String subject, Object content) throws AddressException, MessagingException{if (mailServer == null) mailServer = new MailServer(stmp,userName,password);mailServer.send(recipient, subject, content);}/*** 使用指定的用户名和密码发送邮件* @param server* @param password* @param recipient* @param subject* @param content* @throws MessagingException * @throws AddressException */public static void sendHtml(String server,String password,String stmpIp, String recipient, String subject, Object content) throws AddressException, MessagingException{new MailServer(stmpIp,server,password).send(recipient, subject, content);}public static void main(String[] args) {try {String s = "ceshi2:<br/>您好,我在给你们演示发邮件看见了没.";sendHtml("humf@vip.qq.com","password","IP", "humf@vip.qq.com", "我是是是", s);} catch (AddressException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (MessagingException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}
本文地址:http://blog.csdn.net/qq_22260641

Java中实现SMTP邮件服务器-用demo简单粗暴的来发一波邮件了相关推荐

  1. Java中使用SMTP协议发送电子邮件

    Java中使用SMTP协议发送电子邮件的具体的步骤: 1.首先需要获取发送邮件的Session对象 Session session = Session.getDefaultInstance(prope ...

  2. 理光有邮件服务器吗,理光Ricoh设置扫描PDF到PC和邮件教程

    理光Aficio MP系列都是多功能的打印扫描一体机,可以将文档直接扫描成PDF发送到电脑或者邮箱中,设置其实也不难,只要有管理员账号密码和可以读写的共享路径就能搞定. 具体步骤如下: 1.首先通过在 ...

  3. 公司邮件服务器端口mail2000,简单邮件传输协议SMTP—邮件服务器DBMail

    SMTP概念 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式.SMTP协议属于TCP/ ...

  4. java ftp取远程服务器时间_在 Java 中如何获取 FTP 服务器上的文件修改时间

    使用 Apache Commons Net 进行 FTP 编程的时候,可以使用 FTPClient 类的方法来获取和设置 FTP 服务器上特定文件的修改时间: String getModificati ...

  5. 运维搭建邮件服务器,系统运维|如何在 Ubuntu 环境下搭建邮件服务器(二)

    本教程的第 2 部分将介绍如何使用 Dovecot 将邮件从 Postfix 服务器移动到用户的收件箱. 在第一部分中,我们安装并测试了 Postfix SMTP 服务器.Postfix 或任何 SM ...

  6. kettle 邮件服务器,kettle 实用功能之三 ---- 使用 kettle 群发动态内容的邮件。

    有个客户是做外贸生意的,经常需要群发邮件,要求邮件里商品名称,收信人称谓等内容是动态的. 他一直找不到一个合适的免费的群发工具,于是我推荐他使用了 kettle,并帮他画了一个流程来群发邮件.(这位朋 ...

  7. 搭建邮件服务器过程,关于服务器:搭建邮件服务器过程非常简单

    通常在Linux搭建邮件服务器是须要装置很多软件和配置文件的,所以咱们能够应用一个开源邮件服务器软件来搭建的. 筹备一台服务器与零碎 云服务器或本地虚构的服务器都能够. 服务器须要能链接网络. 装置c ...

  8. centos7自带邮件服务器,CentOS7搭建简单的邮件服务器

    邮件服务器 概述 邮件收.发服务器是分开的,也就是我们需要搭建一个邮件发送服务器和一个邮件收取服务器. 本文会搭建收.发两个服务器,并用邮件客户端(Foxmail)做测试. 协议 协议就是定义规则,这 ...

  9. Java中的XSL转换:一种简单的方法

    XSL转换 (XSLT)是将一个XML文档转换为另一个XML文档的强大机制. 但是,在Java中,XML操作相当冗长和复杂. 即使是简单的XSL转换,也必须编写几十行代码-如果需要适当的异常处理和日志 ...

最新文章

  1. c语言空中升级协议,esp32 http空中升级
  2. mysql搜索_mysql 几种搜索引擎的比较
  3. J2EE的13个规范之(二) JDBC 及其使用
  4. 浅谈linux IO
  5. Vijos P1409 纪念品分组【贪心】
  6. 单循环链表(用尾指针表示)
  7. tyvj——P3524 最大半连通子图
  8. 特殊时期,找工作的 9 点建议!
  9. DB2 SQL执行计划
  10. UE4更改天空盒材质
  11. Eclipse更换黑色主题 Darkest Dark Theme with DevStyle
  12. url中文转码问题(python)
  13. 「游戏引擎 浅入浅出」项目介绍
  14. 永久性删除的文件怎么恢复,怎么还原文件
  15. mysql 页分裂_[翻译] InnoDB 页合并与页分裂
  16. Matlab机械臂综合仿真平台,包含运动学、动力学和控制。 MATLAB机器人仿真正逆运动学simulink轨迹规划 机械臂动力学控制等
  17. 100+免费可商用字体分享
  18. 中国科技技术大学潘建伟计算机,中国研制量子计算机“九章” 比超级计算机快一百万亿倍...
  19. 软件需求与分析需要掌握的内容
  20. springMVC实现图片上传

热门文章

  1. 【视频】R2S软路由扩展2.4|5G双频WiFi应用演示——02_Client模式
  2. Wireshark抓取网络数据包分析与监听
  3. 微信小程序 制作五星评分组件
  4. JQ全屏居中轮播图代码
  5. Git:分布式框架原理
  6. 如何禁止小孩玩游戏? 程序员教你一招!
  7. 70亿人(7 billion humans)闯关记录
  8. python定义一个整数变量a_第二篇.1、python基础之数据类型与变量
  9. ArcGIS教程:什么是影像分类?
  10. 新闻系统(1)之模板机制