当前位置:首页 > CN2资讯 > 正文内容

java 服务器 邮件 java邮件服务器开发

2天前CN2资讯


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、[email protected] 用户写好一封Email发送到sohu的Smtp服务器。对应于上图的步骤①



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



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



  4、[email protected] 用户将邮件发出去之后,就通知[email protected] 用户去收取。[email protected] 用户于是就连接上Sina的POP3服务器收取邮件,对应于上图的步骤④。



  5、POP3服务器从[email protected] 用户的邮箱空间当中取出Email,对应于步骤⑤。



  6、POP3服务器将取出来的Email发给[email protected] 用户,对应于步骤⑥。


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) { // 初始化props props.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); // 创建session session = 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(, iad); }else{ //单收件人 message.setRecipient(, 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(, 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; } @Override protected 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("[email protected]","password","IP", "[email protected]", "我是是是", s); } catch (AddressException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MessagingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }






    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/23628.html

    分享给朋友:

    “java 服务器 邮件 java邮件服务器开发” 的相关文章

    RackNerd虚拟主机服务评测:高性价比的选择与多样化方案

    RackNerd是一家相对年轻但极具潜力的虚拟主机商,自2017年成立以来,一直致力于为客户提供高性价比的服务。作为我在寻找虚拟主机时发现的一家重要供应商,他们的服务范围非常广泛,包括虚拟主机、VPS主机、独立服务器以及服务器托管等,我着实被他们多样的产品所吸引。 RackNerd不仅限于某个特定地...

    AS7473在网络数据传输中的重要性与应用探究

    AS7473简介 AS7473是一个重要的ASN编号,主要与网络数据传输和路由相关。它在信息技术领域中扮演着至关重要的角色,连接着不同的网络节点,确保数据能够顺利传输。想象一下,在这个数字化时代,数据的传输速度和准确性直接影响着我们的工作效率与信息交流。因此,AS7473的定义与重要性绝不容小觑。...

    选择合适的香港 Windows VPS 服务的指南

    在今天的信息技术时代,Windows VPS(虚拟专用服务器)为我们提供了更多灵活性和便利。简单来说,Windows VPS是一种虚拟服务器,运行在Windows操作系统上,用户可以在其中安装和配置自己的软件。这种服务能够让我们拥有一个独立的服务器环境,同时还可以享受到物理服务器的许多优势。 选择香...

    探索尼日利亚节点:区块链技术的未来与机会

    在数字化浪潮的推动下,区块链技术逐渐走进了人们的视野。尼日利亚作为非洲最大的经济体,其区块链的应用受到越来越多的关注。谈到尼日利亚节点,这一概念不仅仅是技术的符号,更是一个活跃的生态系统的组成部分。为了更好地理解这一节点,我们必须先从它的定义开始。 尼日利亚节点,简单来说,就是在区块链网络中承担特定...

    海外云电脑的优势与使用技巧:全面解析云端计算服务

    云电脑,一个如今越来越受欢迎的概念,指的是通过网络将计算资源进行虚拟化,实现远程访问和使用。如果把传统电脑比作我们的家,云电脑就像是一个随时随地可以打开的大门,让我们能够使用强大的计算资源而无需依赖本地设备。简单来说,我可以在任何可以上网的地方,通过云端的服务器,使用重型软件或进行大规模计算,而不需...

    VPS模拟器使用指南:轻松创建和管理虚拟私有服务器

    什么是VPS模拟器? 在我接触虚拟私有服务器(VPS)的那段时间,我发现VPS模拟器是一个非常有趣的概念。简单来说,VPS模拟器是一种软件工具,它帮助用户在本地计算机上创建和管理虚拟私有服务器的环境。通过这类模拟器,用户能够在不需要实际物理服务器的情况下,体验到VPS所提供的强大功能。 这就意味着,...