-
邮件发送
2020-07-25 18:08:37我们通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。 SMTP服务器地址:一般是smtp.xxx.com,比如163邮箱是smtp.163.com 2.2、POP3协议 接收邮件: 我们通常把处理永辉pop3请求...邮件发送原理及实现
1、原理图
2、传输协议
2.1、SMTP协议
发送邮件:
我们通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。
SMTP服务器地址:一般是smtp.xxx.com,比如163邮箱是smtp.163.com
2.2、POP3协议
接收邮件:
我们通常把处理永辉pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)
2.3、传输原理图
3、发送邮件
3.1、简单邮件
1.下载mail-1.4.7.jar和activation-1.1.1.jar
2.代码实现
import com.sun.mail.util.MailSSLSocketFactory; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.security.GeneralSecurityException; import java.util.Properties; /** * @author 许浩 * @date 2020/7/23 - 21:19 */ public class MailDemo01 { public static void main(String[] args) throws Exception { Properties prop=new Properties(); prop.setProperty("mail.host","smtp.qq.com");//设置QQ邮件服务器 prop.setProperty("mail.transport.protocol","smtp");//邮件发送协议 prop.setProperty("mail.smtp.auth","true");//需要验证用户名和密码 //关于QQ邮箱,还要设置SSL加密 MailSSLSocketFactory sf=new MailSSLSocketFactory(); sf.setTrustAllHosts(true); prop.put("mail.smtp.ssl.enable","true"); prop.put("mail.smtp.ssl.socketFactory",sf); //使用JavaMail发送邮件的5个步骤 //1、创建定义整个应用程序所需的环境信息的Session对象 //QQ才有,其他不用 Session session= Session.getDefaultInstance(prop, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { //发件人邮件用户名,授权码 return new PasswordAuthentication("1065124066@@qq.com","nzyozzzdqvpvbbai"); } }); //2、通过session得到transport对象 Transport ts=session.getTransport(); //3、使用邮箱的用户名和授权码连上邮件服务器 ts.connect("smtp.qq.com","1065124066@@qq.com","nzyozzzdqvpvbbai"); //4、创建邮件 MimeMessage message = new MimeMessage(session); //指明邮件的人 message.setRecipient(Message.RecipientType.TO,new InternetAddress("1065124066@@qq.com")); //指明邮件的发件人 message.setFrom(new InternetAddress("1065124066@@qq.com")); //邮件的标题 message.setSubject("Hello"); //邮件的文本内容 message.setContent("<h1 style='color: red'>你好啊</h1>","text/html;charset=UTF-8"); //5、发送邮件 ts.sendMessage(message,message.getAllRecipients()); //6、关闭连接 ts.close(); } }
3.2、发送复杂邮件(超文本)
package com.hao.mail; import com.sun.mail.util.MailSSLSocketFactory; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import java.util.Properties; /** * @author 许浩 * @date 2020/7/23 - 21:19 */ public class MailDemo02 { public static void main(String[] args) throws Exception { Properties prop = new Properties(); prop.setProperty("mail.host", "smtp.qq.com");//设置QQ邮件服务器 prop.setProperty("mail.transport.protocol", "smtp");//邮件发送协议 prop.setProperty("mail.smtp.auth", "true");//需要验证用户名和密码 //关于QQ邮箱,还要设置SSL加密 MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); prop.put("mail.smtp.ssl.enable", "true"); prop.put("mail.smtp.ssl.socketFactory", sf); //使用JavaMail发送邮件的5个步骤 //1、创建定义整个应用程序所需的环境信息的Session对象 //QQ才有,其他不用 Session session = Session.getDefaultInstance(prop, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { //发件人邮件用户名,授权码 return new PasswordAuthentication("1065124066@@qq.com", "授权码"); } }); //可以通过session开启Debug模式,查看所有的进程 session.setDebug(true); //2、通过session得到transport对象 Transport ts = session.getTransport(); //3、使用邮箱的用户名和授权码连上邮件服务器 ts.connect("smtp.qq.com", "1065124066@@qq.com", "授权码"); //4、创建邮件 MimeMessage message = new MimeMessage(session); //指明邮件的人 message.setRecipient(Message.RecipientType.TO, new InternetAddress("1065124066@@qq.com")); //指明邮件的发件人 message.setFrom(new InternetAddress("1065124066@@qq.com")); //邮件的标题 message.setSubject("Hello"); //邮件的文本内容 //准备图片数据 MimeBodyPart image = new MimeBodyPart(); //DataHandler:数据处理 DataHandler dh = new DataHandler(new FileDataSource("src/resources/bz.jpg")); image.setDataHandler(dh);//在外面的Body中放入这个除了图片的数据 image.setContentID("bz.jpg"); //给图片设置一个ID,后面可以使用 //准备正文数据 MimeBodyPart text = new MimeBodyPart(); text.setContent("这是一封邮件正文带图片<img src='cid:bz.jpg'>的邮件", "text/html;charset=UTF-8"); //描述数据关系 MimeMultipart mm = new MimeMultipart(); mm.addBodyPart(text); mm.addBodyPart(image); mm.setSubType("related"); //设置到消息中,保存修改 message.setContent(mm); message.saveChanges(); //5、发送邮件 ts.sendMessage(message, message.getAllRecipients()); //6、关闭连接 ts.close(); } }
4、网络中的邮件
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <body> <form action="${pageContext.request.contextPath}/RegisterServlet.do" ,method="post"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> 邮箱:<input type="email" name="email"><br> <input type="submit" value="注册"> </form> </body> </html> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <body> <h1>注册成功</h1> </body> </html>
pojo
package com.hao.pojo; import java.io.Serializable; /** * @author 许浩 * @date 2020/7/24 - 14:48 */ public class User implements Serializable { private String username; private String password; private String email; public User() { } public User(String username, String password, String email) { this.username = username; this.password = password; this.email = email; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "User{" + "username='" + username + '\'' + ", password='" + password + '\'' + ", email='" + email + '\'' + '}'; } }
servlet
package com.hao.servlet; import com.hao.pojo.User; import com.hao.util.Sendmail; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @author 许浩 * @date 2020/7/24 - 14:40 */ public class RegisterServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //接收用户请求,封装成对象 String username = req.getParameter("username"); String password = req.getParameter("password"); String email = req.getParameter("email"); User user = new User(username, password, email); Sendmail send = new Sendmail(user); new Thread(send).start(); req.setAttribute("message","注册成功,我们以通过邮件反馈给您,请注意查收"); req.getRequestDispatcher("info.jsp").forward(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req,resp); } }
util
package com.hao.util; import com.hao.pojo.User; import com.sun.mail.util.MailSSLSocketFactory; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.util.Properties; /** * @author 许浩 * @date 2020/7/23 - 21:19 */ public class Sendmail implements Runnable{ //用于给用户发送的邮件的邮箱 private String from="1065124066@qq.com"; //邮箱的用户名 private String username="1065124066@qq.com"; //邮箱的密码 private String password="nzyozzzdqvpvbbai"; //发送邮件的服务器地址 private String host="smtp.qq.com"; public User user; public Sendmail(User user){ this.user=user; } public void run() { try { Properties prop = new Properties(); prop.setProperty("mail.host", "smtp.qq.com");//设置QQ邮件服务器 prop.setProperty("mail.transport.protocol", "smtp");//邮件发送协议 prop.setProperty("mail.smtp.auth", "true");//需要验证用户名和密码 //关于QQ邮箱,还要设置SSL加密 MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); prop.put("mail.smtp.ssl.enable", "true"); prop.put("mail.smtp.ssl.socketFactory", sf); //使用JavaMail发送邮件的5个步骤 //1、创建定义整个应用程序所需的环境信息的Session对象 //QQ才有,其他不用 Session session = Session.getDefaultInstance(prop, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { //发件人邮件用户名,授权码 return new PasswordAuthentication("1065124066@@qq.com", "授权码"); } }); //可以通过session开启Debug模式,查看所有的进程 session.setDebug(true); //2、通过session得到transport对象 Transport ts = session.getTransport(); //3、使用邮箱的用户名和授权码连上邮件服务器 ts.connect("smtp.qq.com", "1065124066@@qq.com", "授权码"); //4、创建邮件 MimeMessage message = new MimeMessage(session); //指明收邮件的人 message.setRecipient(Message.RecipientType.TO, new InternetAddress(user.getEmail())); //指明邮件的发件人 message.setFrom(new InternetAddress(from)); //邮件的标题 message.setSubject("用户注册邮件"); String info="恭喜您注册成功,您的用户名:"+user.getUsername()+",您的密码:"+user.getPassword()+",请您妥善保管你的账号和密码"; //邮件的文本内容 message.setContent(info, "text/html;charset=UTF-8"); //5、发送邮件 ts.sendMessage(message, message.getAllRecipients()); //6、关闭连接 ts.close(); }catch (Exception e){ e.printStackTrace(); } } }
-
Java实现邮件发送
2019-07-20 16:03:19Java实现邮件发送 一、邮件服务器与传输协议 要在网络上实现邮件功能,必须要有专门的邮件服务器。这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱...Java实现邮件发送
一、邮件服务器与传输协议
-
要在网络上实现邮件功能,必须要有专门的邮件服务器。这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。
-
SMTP服务器地址:一般是 smtp.xxx.com,比如163邮箱是smtp.163.com,qq邮箱是smtp.qq.com。
-
SMTP协议
通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。
-
POP3协议
通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。
二、Java发送邮件
使用到的jar包:- mail.jar
- activation.jar
QQ邮箱需获取相应的权限:
QQ邮箱–>邮箱设置–>账户–>POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 开启POP3/SMTP服务,然后获取16位授权码(注意不要将授权码泄露,一个账户可以拥有多个授权码)
Java实现纯文本邮件发送package org.westos.email; import com.sun.mail.util.MailSSLSocketFactory; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.security.GeneralSecurityException; import java.util.Properties; public class SendEamil { public static void main(String[] args) throws MessagingException, GeneralSecurityException { //创建一个配置文件并保存 Properties properties = new Properties(); properties.setProperty("mail.host","smtp.qq.com"); properties.setProperty("mail.transport.protocol","smtp"); properties.setProperty("mail.smtp.auth","true"); //QQ存在一个特性设置SSL加密 MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); properties.put("mail.smtp.ssl.enable", "true"); properties.put("mail.smtp.ssl.socketFactory", sf); //创建一个session对象 Session session = Session.getDefaultInstance(properties, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("619046217@qq.com","16位授权码"); } }); //开启debug模式 session.setDebug(true); //获取连接对象 Transport transport = session.getTransport(); //连接服务器 transport.connect("smtp.qq.com","619046217@qq.com","16位授权码"); //创建邮件对象 MimeMessage mimeMessage = new MimeMessage(session); //邮件发送人 mimeMessage.setFrom(new InternetAddress("619046217@qq.com")); //邮件接收人 mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress("875203654@qq.com")); //邮件标题 mimeMessage.setSubject("Hello Mail"); //邮件内容 mimeMessage.setContent("我的想法是把代码放进一个循环里","text/html;charset=UTF-8"); //发送邮件 transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients()); //关闭连接 transport.close(); } }
Java实现文本图片附件复杂的邮件发送
MIME(多用途互联网邮件扩展类型)MimeBodyPart类
javax.mail.internet.MimeBodyPart类 表示的是一个MIME消息,它和MimeMessage类一样都是从Part接口继承过来。
MimeMultipart类
javax.mail.internet.MimeMultipart是抽象类 Multipart的实现子类,它用来组合多个MIME消息。一个MimeMultipart对象可以包含多个代表MIME消息的MimeBodyPart对象
package org.westos.email; import com.sun.mail.util.MailSSLSocketFactory; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.*; import javax.mail.internet.*; import java.security.GeneralSecurityException; import java.util.Properties; public class SendComplexEmail { public static void main(String[] args) throws GeneralSecurityException, MessagingException { Properties prop = new Properties(); prop.setProperty("mail.host", "smtp.qq.com"); 设置QQ邮件服务器 prop.setProperty("mail.transport.protocol", "smtp"); // 邮件发送协议 prop.setProperty("mail.smtp.auth", "true"); // 需要验证用户名密码 // QQ邮箱设置SSL加密 MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); prop.put("mail.smtp.ssl.enable", "true"); prop.put("mail.smtp.ssl.socketFactory", sf); //1、创建定义整个应用程序所需的环境信息的 Session 对象 Session session = Session.getDefaultInstance(prop, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { //传入发件人的姓名和授权码 return new PasswordAuthentication("619046217@qq.com","16位授权码"); } }); //2、通过session获取transport对象 Transport transport = session.getTransport(); //3、通过transport对象邮箱用户名和授权码连接邮箱服务器 transport.connect("smtp.qq.com","619046217@qq.com","16位授权码"); //4、创建邮件,传入session对象 MimeMessage mimeMessage = complexEmail(session); //5、发送邮件 transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients()); //6、关闭连接 transport.close(); } public static MimeMessage complexEmail(Session session) throws MessagingException { //消息的固定信息 MimeMessage mimeMessage = new MimeMessage(session); //发件人 mimeMessage.setFrom(new InternetAddress("619046217@qq.com")); //收件人 mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress("619046217@qq.com")); //邮件标题 mimeMessage.setSubject("带图片和附件的邮件"); //邮件内容 //准备图片数据 MimeBodyPart image = new MimeBodyPart(); DataHandler handler = new DataHandler(new FileDataSource("E:\\IdeaProjects\\WebEmail\\resources\\测试图片.png")); image.setDataHandler(handler); image.setContentID("test.png"); //设置图片id //准备文本 MimeBodyPart text = new MimeBodyPart(); text.setContent("这是一段文本<img src='cid:test.png'>","text/html;charset=utf-8"); //附件 MimeBodyPart appendix = new MimeBodyPart(); appendix.setDataHandler(new DataHandler(new FileDataSource("E:\\IdeaProjects\\WebEmail\\resources\\测试文件.txt"))); appendix.setFileName("test.txt"); //拼装邮件正文 MimeMultipart mimeMultipart = new MimeMultipart(); mimeMultipart.addBodyPart(image); mimeMultipart.addBodyPart(text); mimeMultipart.setSubType("related");//文本和图片内嵌成功 //将拼装好的正文内容设置为主体 MimeBodyPart contentText = new MimeBodyPart(); contentText.setContent(mimeMultipart); //拼接附件 MimeMultipart allFile = new MimeMultipart(); allFile.addBodyPart(appendix);//附件 allFile.addBodyPart(contentText);//正文 allFile.setSubType("mixed"); //正文和附件都存在邮件中,所有类型设置为mixed //放到Message消息中 mimeMessage.setContent(allFile); mimeMessage.saveChanges();//保存修改 return mimeMessage; } }
JavaWeb发送邮件(网站注册成功发送提示邮件)
-
User
package org.westos.mail; public class User { private String name; private String password; private String mail; public User() { } public User(String name, String password, String mail) { this.name = name; this.password = password; this.mail = mail; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getMail() { return mail; } public void setMail(String mail) { this.mail = mail; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", password='" + password + '\'' + ", mail='" + mail + '\'' + '}'; } }
-
Servlet
package org.westos.mail; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class Servlet extends javax.servlet.http.HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) { //处理前端请求 String username = request.getParameter("username"); String password = request.getParameter("password"); String email = request.getParameter("email"); //将信息封装进user对象 User user = new User(username, password, email); SendMail sendMail = new SendMail(user); sendMail.start(); //开启线程 request.setAttribute("msg","发送成功"); try { request.getRequestDispatcher("msg.jsp").forward(request,response); } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
-
SengMail
package org.westos.mail; import com.sun.mail.util.MailSSLSocketFactory; import javax.mail.*; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.security.GeneralSecurityException; import java.security.PublicKey; import java.util.Properties; public class SendMail extends Thread { //发件人信息 private String From = "619046217@qq.com"; //发件人邮箱 private String recipient = "619046217@qq.com"; //邮箱密码 private String password = "16位授权码"; //邮件发送的服务器 private String host = "smtp.qq.com"; //收件人信息 private User user; public SendMail(User user){ this.user = user; } @Override public void run() { try { Properties properties = new Properties(); properties.setProperty("mail.host","smtp.qq.com"); properties.setProperty("mail.transport.protocol","smtp"); properties.setProperty("mail.smtp.auth","true"); //QQ存在一个特性设置SSL加密 MailSSLSocketFactory sf = null; try { sf = new MailSSLSocketFactory(); } catch (GeneralSecurityException e) { e.printStackTrace(); } sf.setTrustAllHosts(true); properties.put("mail.smtp.ssl.enable", "true"); properties.put("mail.smtp.ssl.socketFactory", sf); //创建一个session对象 Session session = Session.getDefaultInstance(properties, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(recipient,password); } }); //开启debug模式 session.setDebug(true); //获取连接对象 Transport transport = null; try { transport = session.getTransport(); } catch (NoSuchProviderException e) { e.printStackTrace(); } //连接服务器 transport.connect(host,From,password); //创建一个邮件发送对象 MimeMessage mimeMessage = new MimeMessage(session); //邮件发送人 mimeMessage.setFrom(new InternetAddress(recipient)); //邮件接收人 mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress(user.getMail())); //邮件标题 mimeMessage.setSubject("网站注册成功"); //邮件内容 mimeMessage.setContent("网站注册成功,密码为"+user.getPassword()+",请妥善保管密码","text/html;charset=UTF-8"); //发送邮件 transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients()); transport.close(); }catch (Exception e){ e.printStackTrace(); } } }
-
register.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>注册页面</title> </head> <body> <form action="${pageContext.request.contextPath}/a.do" method="post"> <p>用户名:<input type="text" name="username" required></p> <p>密码:<input type="password" name="password" required></p> <p>邮箱:<input type="email" name="email" required></p> <p><input type="submit" value="提交"></p> </form> </body> </html>
-
msg.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> ${msg} </body> </html>
-
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>Servlet</servlet-name> <servlet-class>org.westos.mail.Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Servlet</servlet-name> <url-pattern>/a.do</url-pattern> </servlet-mapping> </web-app>
-
-
邮件发送-JavaWeb
2019-09-25 21:30:23邮件发送 邮件发送所依赖的协议 SMTP协议(发送邮件) SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,是一种...通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。 P...邮件发送
邮件发送所依赖的协议
- SMTP协议(发送邮件)
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,是一种提供可靠且有效电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于传输系统之间的邮件信息并提供与来信有关的通知。
通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。- POP3协议(接收邮件)
POP3,全名为"Post Office Protocol - Version 3",是TCP/IP协议族中的一员,由RFC1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。提供了SSL加密的POP3协议被称为POP3S。
POP 协议支持"离线"邮件处理。其具体过程是:邮件发送到服务器上,电子邮件客户端调用邮件客户机程序以连接服务器,并下载所有未阅读的电子邮件。这种离线访问模式是一种存储转发服务,将邮件从邮件服务器端送到个人终端机器上,一般是PC机或 MAC。一旦邮件发送到 PC 机或MAC上,邮件服务器上的邮件将会被删除。但目前的POP3邮件服务器大都可以"只下载邮件,服务器端并不删除",也就是改进的POP3协议。
通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。邮件收发原理
A向B发送文件- A通过smtp协议连接到Smtp服务器,然后发送一封邮件给网易的邮件服务器
- 网易服务器分析发现对方使用QQ的邮件服务器,则通过smtp协议将邮件转投给QQ的Smtp服务器
- QQ的Smtp服务器接收到来自于网易服务器发来的A的邮件,将其存在B的邮箱空间,并通知B有新的邮件
- B收到通知后,通过pop3协议连接到pop3服务器,来查看邮件信息
- pop3服务器将A的邮件取出,并交付给B;
注意】有可能收件人地址,发件人地址等信息都正确了,控制台也打印了正确的信息,但是在收件箱就是收不到信息。这是因为可能收件箱服务器拒收了你发的邮件(比如认为你的邮件是广告),这时候可能在垃圾箱里能找到,可能找不到。解决办法是重复的邮件内容不要多次发送,或者更换收件箱试试
Java发送邮件
前期jar包准备
• mail.jar
• activation.jar编码过程准则
• 创建包含邮件服务器的网络连接信息的Session对象。
• 创建代表邮件内容的Message对象
• 创建Transport对象,连接服务器,发送Message,关闭连接纯文本邮件
- 先在项目中导入jar包
- 获取QQ邮箱授权码(登录qq邮箱->转入设置->转入账户,然后如图操作)
- 测试代码
import com.sun.mail.util.MailSSLSocketFactory; import java.util.*; import javax.mail.*; import javax.mail.internet.*; public class SendEmail { public static void main(String[] args) throws Exception { Properties prop = new Properties(); prop.setProperty("mail.host", "smtp.qq.com"); 设置QQ邮件服务器 prop.setProperty("mail.transport.protocol", "smtp"); // 邮件发送协议 prop.setProperty("mail.smtp.auth", "true"); // 需要验证用户名密码 // 关于QQ邮箱,还要设置SSL加密,加上以下代码即可 MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); prop.put("mail.smtp.ssl.enable", "true"); prop.put("mail.smtp.ssl.socketFactory", sf); //使用JavaMail发送邮件的5个步骤 //1. 创建定义整个应用程序所需的环境信息的 Session 对象 Session session = Session.getDefaultInstance(prop, new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { //发件人邮件用户名、授权码 return new PasswordAuthentication("xxxxxx@qq.com", "授权码"); } }); //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态 session.setDebug(true); //2、通过session得到transport对象 Transport ts = session.getTransport(); //3、使用邮箱的用户名和授权码连上邮件服务器 ts.connect("smtp.qq.com", "xxxxxx@qq.com", "授权码"); //4、创建邮件 //创建邮件对象 MimeMessage message = new MimeMessage(session); //指明邮件的发件人 message.setFrom(new InternetAddress("xxxxxx@qq.com")); //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发 message.setRecipient(Message.RecipientType.TO, new InternetAddress("xxx")); //邮件的标题 message.setSubject("只包含文本的简单邮件"); //邮件的文本内容 message.setContent("你好啊!", "text/html;charset=UTF-8"); //5、发送邮件 ts.sendMessage(message, message.getAllRecipients()); //关闭连接 ts.close(); } }
拥有图片和附件的邮件
MIME(多用途互联网邮件扩展类型)
MimeBodyPart类
javax.mail.internet.MimeBodyPart类 表示的是一个MIME消息,它和MimeMessage类一样都是从Part接口继承过来。
MimeMultipart类
javax.mail.internet.MimeMultipart是抽象类 Multipart的实现子类,它用来组合多个MIME消息。一个MimeMultipart对象可以包含多个代表MIME消息的MimeBodyPart对象。
创建包含内嵌图片的邮件
在前面是单独的使用HTML或者是纯文本内容,但有时需要在纯文本中使用内嵌的方式显示一些图片,因此就要将纯文本和内嵌图片单独存放在MimeBodyPart中然后再将其存放在一个Mimemultipart对象中即可。
import com.sun.mail.util.MailSSLSocketFactory; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import java.util.Properties; public class SendImageEmail { public static void main(String[] args) throws Exception { Properties prop = new Properties(); prop.setProperty("mail.host", "smtp.qq.com"); 设置QQ邮件服务器 prop.setProperty("mail.transport.protocol", "smtp"); // 邮件发送协议 prop.setProperty("mail.smtp.auth", "true"); // 需要验证用户名密码 // 关于QQ邮箱,还要设置SSL加密,加上以下代码即可 MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); prop.put("mail.smtp.ssl.enable", "true"); prop.put("mail.smtp.ssl.socketFactory", sf); //使用JavaMail发送邮件的5个步骤 //1、创建定义整个应用程序所需的环境信息的 Session 对象 Session session = Session.getDefaultInstance(prop, new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { //发件人邮件用户名、授权码 return new PasswordAuthentication("xxxxxxx@qq.com", "授权码"); } }); //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态 session.setDebug(true); //2、通过session得到transport对象 Transport ts = session.getTransport(); //3、使用邮箱的用户名和授权码连上邮件服务器 ts.connect("smtp.qq.com", "xxxxxxxx@qq.com", "授权码"); //4、创建邮件 //创建邮件 MimeMessage message = new MimeMessage(session); // 设置邮件的基本信息 //发件人 message.setFrom(new InternetAddress("xxxxxxx@qq.com")); //收件人 message.setRecipient(Message.RecipientType.TO, new InternetAddress("xxxxxxx@qq.com")); //邮件标题 message.setSubject("带图片的邮件"); // 准备邮件数据 // 准备图片数据 MimeBodyPart image = new MimeBodyPart(); DataHandler dh = new DataHandler(new FileDataSource("src/resources/bz.jpg")); image.setDataHandler(dh); image.setContentID("bz.jpg"); // 准备正文数据 MimeBodyPart text = new MimeBodyPart(); text.setContent("这是一封邮件正文带图片<img src='cid:bz.jpg'>的邮件", "text/html;charset=UTF-8"); // 描述数据关系 MimeMultipart mm = new MimeMultipart(); mm.addBodyPart(text); mm.addBodyPart(image); mm.setSubType("related"); //设置到消息中,保存修改 message.setContent(mm); message.saveChanges(); //5.发送邮件 ts.sendMessage(message, message.getAllRecipients()); ts.close(); } }
带图片和附件的复杂邮件发送
import com.sun.mail.util.MailSSLSocketFactory; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import java.security.GeneralSecurityException; import java.util.Properties; public class SendFileMail { public static void main(String[] args) throws MessagingException, GeneralSecurityException { //创建一个配置文件保存并读取信息 Properties properties = new Properties(); //设置qq邮件服务器 properties.setProperty("mail.host","smtp.qq.com"); //设置发送的协议 properties.setProperty("mail.transport.protocol","smtp"); //设置用户是否需要验证 properties.setProperty("mail.smtp.auth", "true"); //=================================只有QQ存在的一个特性,需要建立一个安全的链接 // 关于QQ邮箱,还要设置SSL加密,加上以下代码即可 MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); properties.put("mail.smtp.ssl.enable", "true"); properties.put("mail.smtp.ssl.socketFactory", sf); //=================================准备工作完毕 //1.创建一个session会话对象; Session session = Session.getDefaultInstance(properties, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("xxxxxx@qq.com", "授权码"); } }); //可以通过session开启Dubug模式,查看所有的过程 session.setDebug(true); //2.获取连接对象,通过session对象获得Transport,需要捕获或者抛出异常; Transport tp = session.getTransport(); //3.连接服务器,需要抛出异常; tp.connect("smtp.qq.com","xxxxxxx@qq.com","授权码"); //4.连接上之后我们需要发送邮件; MimeMessage mimeMessage = imageMail(session); //5.发送邮件 tp.sendMessage(mimeMessage,mimeMessage.getAllRecipients()); //6.关闭连接 tp.close(); } public static MimeMessage imageMail(Session session) throws MessagingException { //消息的固定信息 MimeMessage mimeMessage = new MimeMessage(session); //邮件发送人 mimeMessage.setFrom(new InternetAddress("xxxxxxx@qq.com")); //邮件接收人,可以同时发送给很多人,我们这里只发给自己; mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("xxxxxxxxxx@qq.com")); mimeMessage.setSubject("我也不知道是个什么东西就发给你了"); //邮件主题 /* 编写邮件内容 1.图片 2.附件 3.文本 */ //图片 MimeBodyPart body1 = new MimeBodyPart(); body1.setDataHandler(new DataHandler(new FileDataSource("src/resources/yhbxb.png"))); body1.setContentID("yhbxb.png"); //图片设置ID //文本 MimeBodyPart body2 = new MimeBodyPart(); body2.setContent("请注意,我不是广告<img src='cid:yhbxb.png'>","text/html;charset=utf-8"); //附件 MimeBodyPart body3 = new MimeBodyPart(); body3.setDataHandler(new DataHandler(new FileDataSource("src/resources/log4j.properties"))); body3.setFileName("log4j.properties"); //附件设置名字 MimeBodyPart body4 = new MimeBodyPart(); body4.setDataHandler(new DataHandler(new FileDataSource("src/resources/1.txt"))); body4.setFileName(""); //附件设置名字 //拼装邮件正文内容 MimeMultipart multipart1 = new MimeMultipart(); multipart1.addBodyPart(body1); multipart1.addBodyPart(body2); multipart1.setSubType("related"); //1.文本和图片内嵌成功! //new MimeBodyPart().setContent(multipart1); //将拼装好的正文内容设置为主体 MimeBodyPart contentText = new MimeBodyPart(); contentText.setContent(multipart1); //拼接附件 MimeMultipart allFile =new MimeMultipart(); allFile.addBodyPart(body3); //附件 allFile.addBodyPart(body4); //附件 allFile.addBodyPart(contentText);//正文 allFile.setSubType("mixed"); //正文和附件都存在邮件中,所有类型设置为mixed; //放到Message消息中 mimeMessage.setContent(allFile); mimeMessage.saveChanges();//保存修改 return mimeMessage; } }
JavaWeb发送邮件
网站都提供有用户注册功能,通常注册成功之后就会收到一封来自注册网站的邮件。邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息。
代码实现:-
新建一个JavaWeb项目,配置tomcat,添加jar包
-
编写对应的用户实体类
package com.pojo; public class User { private String username; private String password; private String email; public User() { } public User(String username, String password, String email) { this.username = username; this.password = password; this.email = email; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "User{" + "username='" + username + '\'' + ", password='" + password + '\'' + ", email='" + email + '\'' + '}'; } }
- 前端注册页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>注册</title> </head> <body> <form action="${pageContext.request.contextPath}/RegisterServlet.do" method="post"> 用户名:<input type="text" name="username"><br/> 密码:<input type="password" name="password"><br/> 邮箱:<input type="text" name="email"><br/> <input type="submit" value="注册"> </form> </body> </html>
- 邮件发送工具类
package com.utils; import com.pojo; import com.sun.mail.util.MailSSLSocketFactory; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.util.Properties; public class Sendmail extends Thread { //用于给用户发送邮件的邮箱 private String from = "xxxxxxxxxxx@qq.com"; //邮箱的用户名 private String username = "xxxxxxxxxxx@qq.com"; //邮箱的密码 private String password = "授权码"; //发送邮件的服务器地址 private String host = "smtp.qq.com"; private User user; public Sendmail(User user){ this.user = user; } //重写run方法的实现,在run方法中发送邮件给指定的用户 @Override public void run() { try{ Properties prop = new Properties(); prop.setProperty("mail.host", host); prop.setProperty("mail.transport.protocol", "smtp"); prop.setProperty("mail.smtp.auth", "true"); // 关于QQ邮箱,还要设置SSL加密,加上以下代码即可 MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); prop.put("mail.smtp.ssl.enable", "true"); prop.put("mail.smtp.ssl.socketFactory", sf); //1、创建定义整个应用程序所需的环境信息的 Session 对象 Session session = Session.getDefaultInstance(prop, new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { //发件人邮件用户名、授权码 return new PasswordAuthentication("xxxxxxxxxxx@qq.com", "授权码"); } }); //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态 session.setDebug(true); //2、通过session得到transport对象 Transport ts = session.getTransport(); //3、使用邮箱的用户名和授权码连上邮件服务器 ts.connect(host, username, password); //4、创建邮件 MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); //发件人 message.setRecipient(Message.RecipientType.TO, new InternetAddress(user.getEmail())); //收件人 message.setSubject("用户注册邮件"); //邮件的标题 String info = "恭喜您注册成功,您的用户名:" + user.getUsername() + ",您的密码:" + user.getPassword() + ",请妥善保管,如有问题请联系网站客服!!"; message.setContent(info, "text/html;charset=UTF-8"); message.saveChanges(); //发送邮件 ts.sendMessage(message, message.getAllRecipients()); ts.close(); }catch (Exception e) { throw new RuntimeException(e); } } } 5. 编写对应的servlet处理类 import 用户实体类所在的包; import com.utils; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class RegisterServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { //接收用户请求,封装成对象 String username = request.getParameter("username"); String password = request.getParameter("password"); String email = request.getParameter("email"); User user = new User(username,password,email); //用户注册成功之后,给用户发送一封邮件 //我们使用线程来专门发送邮件,防止出现耗时,和网站注册人数过多的情况; Sendmail send = new Sendmail(user); //启动线程,线程启动之后就会执行run方法来发送邮件 send.start(); //注册用户 request.setAttribute("message", "注册成功,我们已经发了一封带了注册信息的电子邮件,请查收!如网络不稳定,可能过会儿才能收到!!"); request.getRequestDispatcher("info.jsp").forward(request, response); } catch (Exception e) { e.printStackTrace(); request.setAttribute("message", "注册失败!!"); request.getRequestDispatcher("info.jsp").forward(request, response); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
-
邮件传输协议
2020-01-12 11:15:22因此,我们通常也把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器),通俗来说SMTP协议是用来发送邮件的 POP3/IMAP协议 POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户...邮件传输协议
SMTP协议
用户连接上邮件服务器之后,要想给它发送一封电子邮件,需要遵循一定的通讯规则,SMTP协议就是用来定义这种通讯规则的。因此,我们通常也把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器),通俗来说SMTP协议是用来发送邮件的
POP3/IMAP协议
POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的 。
而IMAP提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。
两个协议都是用来接收邮件的
常见的邮箱及对应协议
QQ邮箱
类型
服务器名称
服务器地址
非SSL协议端口
SSL协议端口
发件服务器
SMTP
smtp.qq.com
25
465/587
收件服务器
POP
pop.qq.com
110
995
收件服务器
IMAP
imap.qq.com
143
993
163邮箱
类型
服务器名称
服务器地址
非SSL协议端口
SSL协议端口
发件服务器
SMTP
smtp.163.com
25
465/994
收件服务器
POP
pop.163.com
110
995
收件服务器
IMAP
imap.163.com
143
993
sohu邮箱
类型
服务器名称
服务器地址
非SSL协议端口
SSL协议端口
发件服务器
SMTP
smtp.sohu.com
25
收件服务器
POP
pop3.sohu.com
110
126邮箱
类型
服务器名称
服务器地址
非SSL协议端口
SSL协议端口
发件服务器
SMTP
smtp.126.com
25
收件服务器
POP
pop.126.com
110
139邮箱
类型
服务器名称
服务器地址
非SSL协议端口
SSL协议端口
发件服务器
SMTP
smtp.139.com
25
收件服务器
POP
pop.139.com
110
QQ企业邮箱
类型
服务器名称
服务器地址
非SSL协议端口
SSL协议端口
发件服务器
SMTP
smtp.exmail.qq.com
587/465
收件服务器
POP
pop.exmail.qq.com
995
Foxmail
类型
服务器名称
服务器地址
非SSL协议端口
SSL协议端口
发件服务器
SMTP
SMTP.foxmail.com
25
收件服务器
POP
POP.foxmail.com
110
china.com:
类型
服务器名称
服务器地址
非SSL协议端口
SSL协议端口
发件服务器
SMTP
smtp.china.com
25
收件服务器
POP
pop.china.com
110
yahoo.com
类型
服务器名称
服务器地址
非SSL协议端口
SSL协议端口
发件服务器
SMTP
smtp.mail.yahoo.com
587
收件服务器
POP
pop.mail.yahoo.com
995
-
JAVA实现邮件发送
2020-07-04 22:52:37一、邮件服务器与传输协议 要在网络上实现邮件...SMTP协议:通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。 POP3协议:通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP -
JavaWeb--邮件发送(web注册邮件,纯文本邮件,带图片邮件,带附件邮件)
2020-08-29 23:28:02通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。 接收邮件:POP3协议 通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。 SMTP服务器地址:一般是 ... -
java实现邮件发送原生
2020-11-30 00:21:33Java实现邮件发送 一、邮件服务器与传输协议 要在网络上实现邮件功能,...通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。 POP3协议 通常把处理用户pop3请求(邮件接收请求)的服务器 -
Java Servlet邮件发送
2019-07-22 21:44:09电子邮件 要在网络上实现邮件功能,必须要有专门的邮件服务器。 ... 电子邮箱(E-Mail地址)的获得需要在邮件服务器上进行申请。比如我们要使用QQ邮箱,就需要...我们通常把处理用户smtp请求(邮件发送请求)的服务器称之为... -
【编程开发】之 Java 实现邮件发送
2020-12-11 10:51:07一、邮件简介 1、邮件服务器与传输协议 邮件服务器:要在网络上实现...SMTP服务器:通常把处理用户 smtp 请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。 POP3服务器:通常把处理用户 pop3 请求(邮 -
用java实现邮件发送
2020-12-06 22:53:14电子邮件 1、基础知识铺垫 要在网络上实现邮件功能,必须要有专门的邮件服务器。 这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过的邮件,并把邮件投递到邮件接收...我们通常把处理用户smtp请求(邮件 -
讨论区交流平台项目 - 发送邮件
2020-05-23 00:24:47功能分析 ... 而实现该功能必须要有专门的邮件服务器。...我们通常把处理用户 SMTP 请求(邮件发送请求)的服务器称之为 SMTP 服务器(邮件发送服务器);把处理用户 POP3 请求(邮件接收请求)的服务器 -
海创软件组-20200712-项目常用工具类-邮件发送,ftp上传下载工具类,MD5工具类
2020-07-10 22:58:43一、邮件发送工具类 1)邮件服务器与传输协议 要在网络上实现邮件功能,...通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。 POP3协议 通常把处理用户pop3请求(邮件接收请求)的服务 -
JavaWeb知识小汇(13)—— 邮件发送原理及实现
2021-01-31 14:40:17文章目录邮件发送原理及实现电子邮件传输协议 邮件发送原理及实现 电子邮件 要在网络上实现邮件功能,必须要有专门的邮件服务器 ...发送邮件,我们通常把处理用户smtp请求的服务器称之为SMTP服务器 POP3协议 -
java发送邮件[附件/内嵌图片]
2020-07-13 03:58:49邮件收发 要想在网络上实现邮件功能,必须要有专门的邮件服务器 这些邮件服务器类似显示生活中的邮局,它主要接收用户投递过来的...我们通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器 POP3协议 接收 -
Java收发邮件过程中具体的功能是怎么实现的
2019-09-28 15:17:01因而,通常我们也把处理用户smtp请求(邮件发送请求)的邮件服务器称之为SMTP服务器。(25) POP3协议 同样,用户若想从邮件服务器管理的电子邮箱中接收一封电子邮件的话,他连上邮件服务器后,也需要遵循一定的通迅... -
邮件传送
2019-07-21 17:35:59电子邮件 电子邮件是依靠邮箱服务器来完成的; ... 电子邮箱(E-Mail地址)的获得需要在邮件服务器上进行申请。...通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。 P... -
JAVA代码实现邮件传输
2019-07-19 16:04:40SMTP服务器(用于发送邮件):用于处理用户smtp请求(邮件发送请求)。SMTP服务器地址:一般是 smtp.xxx.com,qq邮箱是smtp.qq.com。 POP3服务器(用于接收邮件):用于处理用户pop3请求(邮件接收请求)。 ... -
邮件服务器安全问题
2018-03-16 12:09:001、前言 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。通过邮件钓鱼行为进行投递是一种较为主流的方式,通过对流量的抓包总有些...因此,我们通常也把处理用户smtp请求(邮件发送请求)的服务器称... -
apache james mysql_使用Apache James搭建邮件服务器
2021-02-06 12:58:14最近遇到一个关于邮件的...例如,SMTP协议发送消息并处理传出邮件请求。 IMAP和POP3协议接收邮件并用于处理传入邮件。邮件服务器(或电子邮件服务器)是一种发送和接收电子邮件的计算机系统。 邮件服务器使用标准电子... -
socket.onmessage没有接收到服务器消息_使用Apache James搭建邮件服务器
2020-10-22 23:17:44最近遇到一个关于邮件...例如,SMTP协议发送消息并处理传出邮件请求。 IMAP和POP3协议接收邮件并用于处理传入邮件。邮件服务器(或电子邮件服务器)是一种发送和接收电子邮件的计算机系统。 邮件服务器使用标准电子... -
php通过socket实现smtp协议
2013-03-05 21:45:17SMTP是简单邮件传输协议的简称,它可以实现客户端向服务器发送邮件的功能。所以 下面所讲的命令是指客户端向服务器发出请求指令,而响应则是指服务器返回给客户端的信息。 SMTP分为命令头和信息体两部分。命令... -
php通过socket编程模范smtp协议
2010-05-24 18:49:01SMTP是简单邮件传输协议的简称,它可以实现客户端向服务器发送邮件的功能。所以 下面所讲的命令是指客户端向服务器发出请求指令,而响应则是指服务器返回给客户端的信息。 SMTP分为命令头和信息体两部分。命... -
java处理邮箱地址是否真实存在的实例
2012-07-17 17:39:262.SMTP是个请求/响应协议,命令和响应都是基于ASCII文本,并以CR和LF符结束。响应包括一个表示返 回状态的三位数字代码 3.SMTP在TCP协议25号端口监听连接请求 4.连接和发送过程 SMTP协议说复杂也不复杂... -
雪崩效应造成处理阻塞
2008-12-19 01:17:00昨天(其实好久了,这是邮件内容)发现ogre4ad(一个比较适应通用的通讯协议的服务器,依靠PIPE和业务进程通讯)发送数据感觉速度慢,(就像有阻塞),服务器重启动一段时间后,就会出现后端服务器进城将发送管道写... -
Redis 中的管道有什么用?
2021-02-01 22:52:31一次 请求 / 相应 服务器能实现处理新的请求即使旧的请求还未被响应。这样就可以将多个命令发送到服务器,而不用等待回复,最后在一个步骤中读取该答复。 这就是管道(pipelining),是一种几十年来广泛使用的技术... -
面试积累-Redis-Redis中的管道有什么用?
2020-03-16 17:40:55一次请求/响应服务器能实现处理新的请求即使旧的请求还未被响应,这样就可以将多个命令发送到服务 器,而不用等待回复,最后在一个步骤中读取该答复。 这就是管道(pipelining),是一种几十年来广泛使用的技术。... -
XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解
2008-12-05 08:39:07各浏览器开发商已经达成协议,对XML实行严格而挑剔的解析,任何细小的错误都会被报告。你可以将上面的myfile.xml修改一下,比如将改为,然后用IE5直接打开myfile.xml,会得到一个出错信息页面: <title>XML轻松... -
JavaMail
2017-08-22 13:47:22一般情况下把处理smtp请求(用户发送请求)的邮件服务器称之为smtp服务器。而把处理pop3(接收)请求的邮件服务器称之为pop3服务器。 在javamail中数据有三种关系,分别为mixed,related和alternative。两...
-
MHA 高可用 MySQL 架构与 Altas 读写分离
-
婚纱摄影APP开发具备哪些功能
-
ELF视频教程
-
基于python的dango框架购物商城毕业设计毕设源代码使用教程
-
基于词内部结合度和边界自由度的新词发现
-
值得电商美工借鉴的购物APP页面设计,让人无法自拔
-
本地伪集群测试Demo
-
Ayon-MIST-CSE:所有在MIST,孟加拉国研究的材料-源码
-
竞争性编程-源码
-
互联网时代的网络自动化运维
-
牙线STEM实验室-源码
-
Vue报错:Uncaught (in promise) TypeError: Cannot read property ‘$message‘ of undefined
-
关押罪犯(二分+染色)
-
Docker从入门到精通
-
activiti待办视图
-
朱老师C++课程第3部分-3.6智能指针与STL查漏补缺
-
升输入node报错 install node-sass@4.13.0 postinstall:`node scripts/build.js`
-
MMM 集群部署实现 MySQL 高可用和读写分离
-
分布式系统篇(待更新)-事务 锁 文件存储等
-
嵌入式必知必会