邮箱服务器

一.邮箱服务器的基本概念

邮件的客户端:可以只安装在电脑上(C/S)的也可以是网页形式(B/S)的
邮件服务器:起到邮件的接受与推送的作用
邮件发送的协议:
协议:就是数据传输的约束
接受邮件的协议:POP3 、 IMAP
发送邮件的协议:SMTP
网易邮箱服务器地址:
pop.126.com
smtp.126.com
imap.126.com

邮件发送与接收的详细过程

在这里插入图片描述

二,demo—做一个生日祝福定时发送

package beyond.mail;import java.util.Properties;import javax.mail.Authenticator;
import javax.mail.Message;
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;public class MailUtils {//email:邮件要发给谁(收件人)//subject:代表主题//emailMsg:邮件的内容public static void sendMail(String email, String subject,String emailMsg)throws AddressException, MessagingException {// 1.创建一个程序与邮件服务器会话对象 SessionProperties props = new Properties();props.setProperty("mail.transport.protocol", "SMTP");//发邮件的协议props.setProperty("mail.host", "localhost");//发送邮件的服务器地址props.setProperty("mail.smtp.auth", "true");// 指定验证为true// 创建验证器Authenticator auth = new Authenticator() {public PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("yan", "beyond");//发邮件的账号验证}};Session session = Session.getInstance(props, auth);// 2.创建一个Message,它相当于是邮件内容Message message = new MimeMessage(session);message.setFrom(new InternetAddress("yan@yy.com")); // 设置发送者message.setRecipient(RecipientType.TO, new InternetAddress(email)); // 设置发送方式与接收者message.setSubject(subject);//设置邮件的主题// message.setText("这是一封激活邮件,请<a href='#'>点击</a>");message.setContent(emailMsg, "text/html;charset=utf-8");// 3.创建 Transport用于将邮件发送Transport.send(message);}
}
package beyond.birthday;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import javax.sql.DataSource;import com.mchange.v2.c3p0.ComboPooledDataSource;public class DataSourceUtils {private static DataSource dataSource = new ComboPooledDataSource();private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();// 直接可以获取一个连接池public static DataSource getDataSource() {return dataSource;}public static Connection getConnection() throws SQLException{return dataSource.getConnection();}// 获取连接对象public static Connection getCurrentConnection() throws SQLException {Connection con = tl.get();if (con == null) {con = dataSource.getConnection();tl.set(con);}return con;}// 开启事务public static void startTransaction() throws SQLException {Connection con = getCurrentConnection();if (con != null) {con.setAutoCommit(false);}}// 事务回滚public static void rollback() throws SQLException {Connection con = getCurrentConnection();if (con != null) {con.rollback();}}// 提交并且 关闭资源及从ThreadLocall中释放public static void commitAndRelease() throws SQLException {Connection con = getCurrentConnection();if (con != null) {con.commit(); // 事务提交con.close();// 关闭资源tl.remove();// 从线程绑定中移除}}// 关闭资源方法public static void closeConnection() throws SQLException {Connection con = getCurrentConnection();if (con != null) {con.close();}}public static void closeStatement(Statement st) throws SQLException {if (st != null) {st.close();}}public static void closeResultSet(ResultSet rs) throws SQLException {if (rs != null) {rs.close();}}}
web.xml
<listener><listener-class>beyond.birthday.BirthdayListener</listener-class>	</listener>
package beyond.birthday;public class Customer {private int id;private String username;private String password;private String realname;public int getId() {return id;}public void setId(int id) {this.id = id;}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 getRealname() {return realname;}public void setRealname(String realname) {this.realname = realname;}public String getBirthday() {return birthday;}public void setBirthday(String birthday) {this.birthday = birthday;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}private String birthday;private String email;}
package beyond.birthday;import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;import javax.mail.MessagingException;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;import beyond.birthday.Customer;
import beyond.mail.MailUtils;public class BirthdayListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {//当web应用启动开启调动---功能在用户的生日当前发送邮件Timer timer = new Timer();//开启定时器,导util下的包timer.scheduleAtFixedRate(new TimerTask() {@Overridepublic void run() {//为当前生日用户发邮件//1,获得当前过生日的用户SimpleDateFormat format = new SimpleDateFormat("MM-dd");//获得当天的日期String currentDate = format.format(new Date());//currentDate----10-14QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());//根据当前的时间,从数据库查询今天过生日的用户String sql = "select * from customer where birthday like ?";//写SQL语句List<Customer> customerList = null;try {customerList = runner.query(sql, new BeanListHandler<Customer>(Customer.class),"%"+currentDate);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}//2,发邮件给当前过生日的用户if(customerList!=null&&customerList.size()>0){for(Customer c :customerList){String emailMsg = "亲爱的:" + c.getRealname() + ",生日快乐!";try {MailUtils.sendMail(c.getEmail(), "生日祝福", emailMsg);System.out.println(c.getRealname()+"邮件发送完毕");} catch (MessagingException e) {e.printStackTrace();}}}}}, new Date(),1000*30 );//1000ms*30=半分钟//实际开发中,起始时间肯定是一个固定的时间//period:间隔时间  时间开发中,间隔时间是1天(为一天会有好多人过生日,把今天过生日的人给发送生日祝福)}@Overridepublic void contextDestroyed(ServletContextEvent sce) {// TODO Auto-generated method stub}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

类加载器

一、类加载器 1&#xff0c;什么是类加载器&#xff1f; 类加载器就是用来加载字节码文件 2&#xff0c;类加载器的种类有哪些&#xff1f; 1&#xff09;BootStrap&#xff1a;引导类加载器&#xff1a;加载都是最基础的文件 2&#xff09;ExtClassLoader&#xff1a;扩展类加…

算法---链表

文章目录反转链表合并两个有序链表删除重复元素反转链表 反转链表包括两种&#xff0c;反转全部元素或者反转部分元素。在这里&#xff0c;我们约定&#xff1a;数据元素类型是struct LinkNode&#xff0c;要反转链表的第一个节点是head&#xff0c;head的前面一个节点是pre&a…

SSM

二、环境设置&#xff08;MyEclipse&#xff09; 1&#xff0c;字体设置 window–>Preference->General->Appearance->Colors and Fonts->Basic Text->Font 2&#xff0c;workspace字符集设置 window–>Preference->General->Appearance->W…

设计模式--Strategy 策略模式

所谓策略模式(Strategy Pattern)&#xff0c;就是将策略 (算法) 封装为一个对象&#xff0c;易于相互替换&#xff0c;如同 USB 设备一样可即插即用&#xff1b;如果将策略、具体的算法和行为&#xff0c;编码在某个类或客户程序内部&#xff0c;将导至事后的修改和扩展不易。 …

打开eclipse出现Failed to load the JNI shared library “D:\java\jdk\bin\...\jre\bin\server\jvm.dll”如何解决?

eclipse打开的时候出现Failed to load the JNI shared library “D:\java\jdk\bin…\jre\bin\server\jvm.dll”如何解决&#xff1f;&#xff1f; 如图所示&#xff1a; 即代表你的jdk与eclipse的位数不一样&#xff01;&#xff01;&#xff01; 你可以查看一下eclipse和jd…

圆形坠落模拟算法设计

目标&#xff1a;实现一个算法&#xff0c;模拟在一个封闭二维区域&#xff0c;圆形小球朝给定方向坠落的过程&#xff0c;实现二维区域的紧密填充。 像下面这样&#xff1a; 难点&#xff0c;及其简单解决&#xff1a; 1.如何把粒子移动尽可能远&#xff1f; 图中的粒子i&…

Maven详细教学

一、Maven简介 maven&#xff1a;是apache下的一个开源项目&#xff0c;是纯java开发&#xff0c;并且只是用来管理java项目的 依赖管理&#xff1a;就是对jar包的统一管理 可以节省空间 项目一键构建&#xff1a;mvn tomcat:run该代码可以将一个完整的项目运行起来&#xff0…

网站后台中对html标签的处理

最近做一个CMS&#xff0c;后台中需要使用在线编辑器对新闻进行编辑&#xff0c;然后发表。我用的在线编辑器是CKEditorCKFinder。也许是我为了让CKEditor更本地化吧&#xff0c;改了很多。后来发现在CKEditor中对文字设置字体、颜色、字号大小时文字的<span>标签会出现N…

<各国地图轮廓app>技术支持

如在app使用过程中遇到任何问题&#xff0c;请与开发者联系caohechunhotmail.com

ffplay SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can‘t initialize audio client“

windows下&#xff1a; ffplay 提示"SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can’t initialize audio client" 添加环境变量&#xff1a;SDL_AUDIODRIVERdirectsound

(扩展)欧几里德快速幂

GCD模板 __int64 gcd(__int64 a,__int64 b) {return b0? a:gcd(b,a%b); } 欧几里德算法又称辗转相除法&#xff0c;用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理&#xff1a; gcd函数就是用来求(a,b)的最大公约数的。 gcd函数的基本性质&#xff1a; gcd(a,…

Silverlight + WCF异步调用 例子

看大家好像对我的NParsing框架不是很感兴趣&#xff08;写NParsing帖没人顶我&#xff09;&#xff0c;那就给大家来点“甜品”&#xff0c;换换口谓。来说说Silverlight方面的东西。 在Silverlight中数据通信只能用异步。有人会觉得写起来很麻烦&#xff0c;其实不然。也有很简…

小议SqlMapConfig.xml配置文件

①、mybatis-3-config.dtd 主要用于mybatis的核心配文件sqlMapConfig.xml的约束 sqlMapConfig.xml代码如下&#xff1a; <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN&q…

ffmepg 命令提取音视频数据

原文件&#xff1a; 1&#xff1a; 原音频数据提取&#xff08;保留还是mp4的封装格式的&#xff09;&#xff1a; ffmpeg -i test_1920x1080.mp4 -acodec copy -vn audio.mp4 -vn 就是没有视频&#xff0c; -acodec copy 音频拷贝不进行任何转码 原视频数据提取&#xff0…

【7】jQuery学习——入门jQuery选择器之过滤选择器-可见性过滤选择器

这篇什么都不说&#xff0c;看标题就知道了&#xff0c;很简单&#xff0c;就2个选择器&#xff0c;嘿嘿 选择器描述返回$("Element:hidden")选取所有不可见的元素集合元素$("Element:visible")选取所有可见元素集合元素这篇很简单吧&#xff0c;就2个&…

Mybatis中的核心配置文件SqlMapConfig.xml详细介绍

一、properties&#xff08;属性&#xff09; 可以引用java属性文件中的配置信息如下 jdbc.properties代码如下&#xff1a; jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/mybatis?characterEncodingutf-8 jdbc.usernameroot jdbc.passwordbeyond…

用Kotlin开发您的第一个应用程序| Android与Kotlin

In the previous article, we learned how to setup Kotlin in the android studio? Now moving to journey ahead we are going to develop our first app with Kotlin. It is the basic app, but it will let you know the structure of the program. 在上一篇文章中&#x…

(只需挨个复制粘贴命令即可部署)在Centos7下搭建文件服务器(VSFTPD)

观看北京尚学堂-百战程序员笔记一、VSFTPD简介 Linux的组件&#xff08;一款软件&#xff09;&#xff0c;安装到Linux后可以通过java代码&#xff08;FtpClient&#xff09;实现文件的上传。基于FTP协议。 由于VSFTPD是基于FTP协议&#xff0c;客户端浏览器是需要通过http协议…

bcd码二进制转十进制_二进制编码的十进制(BCD码)及其加法

bcd码二进制转十进制Prerequisite: Number systems 先决条件&#xff1a; 数字系统 BCD Code (8421 Code): In BCD 8421 code, each decimal digit is represented using a 4-bit binary number. The 4-bit binary numbers have their weights attached as 8, 4, 2, 1 from MS…

LINQ to XML:如何读写XCData

using System;using System.Xml.Linq;namespace ConsoleApplication1 {class Program{static void Main(string[] args){//写入CDATA元素块var doc new XElement("Test",new XElement("User",new XAttribute("name", "chenxizhang"),…