Javaweb实现邮件发送

本文实例为大家分享了Javaweb实现邮件发送的具体代码,供大家参考,具体内容如下

发送邮件使用的是SMTP协议:一般是smtp.xxx.com ,比如smtp.qq.com

接收邮件:POP3协议

附件:MIME

使用Java发送邮件需要准备JavaMail API 和 Java Activation Framework

得到两个jar包

mail.jar

activation.jar

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 Email {
    public static void main(String[] args) throws GeneralSecurityException, MessagingException {
        Properties prop = new Properties();
        //设置qq邮件服务器
        prop.setProperty("mail.host", "smtp.qq.com");
        //邮件发送协议
        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() {
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("920367321@qq.com", "hnjwzkfilnnnbbig");
            }
        });
        //开启session的debug模式,可以看到程序发送Email的运行状态
        /*session.setDebug(true);*/
 
        //2,通过session得到transport对象
        Transport ts = session.getTransport();
        //3,使用邮箱的用户名和授权码连接上邮件服务器
        ts.connect("smtp.qq.com", "920367321@qq.com", "hnjwzkfilnnnbbig");
        //4,创建邮件
        MimeMessage message = new MimeMessage(session);
        //指明邮件的发件人
        message.setFrom(new InternetAddress("920367321@qq.com"));
        //指明邮件的收件人,现在发件人和收件人是一样的,就是自己给自己发
        message.setRecipient(Message.RecipientType.TO, new InternetAddress("920367321@qq.com"));
        //邮件的标题
        message.setSubject("只包含文本的简单邮件");
        //邮件的文本内容
        message.setContent("你好啊","text/html;charset=UTF-8");
        //5,发送邮件
        ts.sendMessage(message,message.getAllRecipients());
        //6,关闭连接
        ts.close();
    }
}

关于在邮件中添加附件 MIME(多用途互联网邮件扩展类型)

MimeBodyPart类

javax.mail.internet.MimeBodyPart类表示的是一个MIME消息,它和MimeMesssage类一样都是从Part接口结成过来

MimeMultipart类

javax.mail.internet.MimeMultipart是抽象类Multipart的实现子类,它用来组合多个MIME消息,一个MimeMultipart对象可以包含多个代表MIME消息的MimeBodyPart对象

带图片的邮件,其他的代码与上面一样,只需要更改邮件的内容即可

//邮件的标题
message.setSubject("只包含图片的简单邮件");
 //准备邮件数据
 
//准备图片数据
MimeBodyPart image = new MimeBodyPart();
//图片需要数据处理,DataHandler就是这样的一个类
DataHandler dh = new DataHandler(new FileDataSource("src/main/resources/01.png"));
image.setDataHandler(dh);//在我们的body中放入这个处理的图片数据
image.setContentID("01.png");
 
//准备正文数据
MimeBodyPart text = new MimeBodyPart();
text.setContent("这是一封带图片<img src='cid:01.png/>'的邮件", "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());

带附件的邮件,操作基本没差,只需要创建一个附件的MimeBodyPart再添加到消息中即可

//准备图片数据
MimeBodyPart image = new MimeBodyPart();
//图片需要数据处理,DataHandler就是这样的一个类
DataHandler dh = new DataHandler(new FileDataSource("src/main/resources/01.png"));
image.setDataHandler(dh);//在我们的body中放入这个处理的图片数据
        image.setContentID("01.png");
 
//附件
MimeBodyPart accessory = new MimeBodyPart();
accessory.setDataHandler(new DataHandler(new FileDataSource("src/main/resources/hello.txt")));
accessory.setFileName("hello.txt");//设置附件的名字
//准备正文数据
MimeBodyPart text = new MimeBodyPart();
text.setContent("这是一封带图片<img src='cid:01.png'/>的邮件", "text/html;charset=UTF-8");
//描述数据关系
MimeMultipart mm = new MimeMultipart();
mm.addBodyPart(text);
mm.addBodyPart(image);
mm.setSubType("related");
 
//将图片和文本封装为一个MimeMultipart
MimeBodyPart contentText = new MimeBodyPart();
contentText.setContent(mm);
 
//拼接附件
MimeMultipart allFile = new MimeMultipart();
allFile.addBodyPart(accessory);//附件
allFile.addBodyPart(contentText);
allFile.setSubType("mixed");//正文和附件都存在邮件中,所有类型设置为mixed
 
//设置到消息中,保存修改
message.setContent(allFile);//把最后编辑好的邮件放到消息当中
message.saveChanges();//保存修改
//5,发送邮件
ts.sendMessage(message,message.getAllRecipients());

注意点:

在一个web项目中:例如实现一个用户注册就给用户发一封邮件的功能,但通过之前的代码我们可以发现,发送一封邮件是需要时间的,这个时候考虑到用户体验我们不应该让用户等待,所以可以考虑使用多线程,为邮件发送单独设置为一条线程,而不影响主线程的操作!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2022-06-23

JavaWeb实现邮件发送功能

基于JavaWeb的邮件发送功能(多附件),供大家参考,具体内容如下 本次学习主要目的是为了测试由QQ邮箱发送到任意一个有效邮箱的功能实现,附带多个附件.学习者可以借鉴其他邮箱的格式,梳理一下要写的内容.项目把文件内容放到了MimeMessage 邮件对象里,其中包含了如发件人.收件人.抄送人.邮件主题.邮件内容.邮件时间和邮件附件等一些内容. 项目中遇到的问题: 1.在执行到 File file = new File("D:\Chat_Software\sky.JPG");时出现错误

JavaWeb实现邮件发送接收功能实例解析

一.邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.sohu.163等等他们都有自己的邮件服务器. 这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中. 电子邮箱(E-Mail地址)的获得需要在邮件服务器上进行申请,确切地说,电子邮箱其实就是用户在邮件服务器上申请的一个账户,用户在邮件服务器上申请了一个

JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)

下面通过通过图文并茂的方式给大家介绍JavaWeb实现用户登录注册功能实例代码,一起看看吧. 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JS

php实现在站点里面添加邮件发送的功能

下面夏日博客来讲下如何在站点里面添加一个邮件发送的功能. 首先需要下载一个smtp 的 php 邮件发送类,代码如下: <?php class smtp { /* Public Variables */ public $smtp_port; public $time_out; public $host_name; public $log_file; public $relay_host; public $debug; public $auth; public $user; public $pas

Python实现的查询mysql数据库并通过邮件发送信息功能

本文实例讲述了Python实现的查询mysql数据库并通过邮件发送信息功能.分享给大家供大家参考,具体如下: 这里使用Python查询mysql数据库,并通过邮件发送宕机信息. Python代码如下: #-*- coding: UTF-8 -*- #!/usr/bin/env python ''''' author:qlzhong Created on 2015-6-29 征途宕机日志统计汇总 ''' import MySQLdb import time import datetime impo

jQuery EasyUi 验证功能实例解析

废话不多说了,下面给大家介绍下jquery easyui 验证功能的实例代码. { field : 'startPort', title : "起始端口", editor: "text", width : 50, editor: { type: 'SuperValidatebox', options: { required: true, validType: ['integer','length[0,5]'] } }, 自从1.3.2版本开始,validatebox

python定时利用QQ邮件发送天气预报的实例

大致介绍 好久没有写博客了,正好今天有时间把前几天写的利用python定时发送QQ邮件记录一下 1.首先利用request库去请求数据,天气预报使用的是和风天气的API(www.heweather.com/douments/api/s6/weather-forecast) 2.利用python的jinja2模块写一个html模板,用于展示数据 3.python的email构建邮件,smtplib发送邮件 4.最后使用crontab定时执行python脚本 涉及的具体知识可以去看文档,本文主要就是

Python中实现switch功能实例解析

前言 今天在学习python的过程中,发现python没有switch这个语法.于是就想在python中如何才能实现这个功能呢? 正文 本文中我们对switch的使用模拟为正常的数据库的增删改查操作的对应,如'select 对应'select action'等. 1.简单的if-else 正如我们所知,python中有if语句,而且当时学习C的时候,学到if-else时引出的的替代品就是switch,两者可以完美的互相替代,需要注意的是在python中else if简化成了elif.如下所示:

Flask实现异步非阻塞请求功能实例解析

本文研究的主要是Flask实现异步非阻塞请求功能,具体实现如下. 最近做物联网项目的时候需要搭建一个异步非阻塞的HTTP服务器,经过查找资料,发现可以使用gevent包. 关于gevent Gevent 是一个 Python 并发网络库,它使用了基于 libevent 事件循环的 greenlet 来提供一个高级同步 API.下面是代码示例: from gevent.wsgi import WSGIServer from yourapplication import app http_serve

C#实现的自定义邮件发送类完整实例(支持多人多附件)

本文实例讲述了C#实现的自定义邮件发送类.分享给大家供大家参考,具体如下: using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Mail; using System.Net.Mime; namespace ConsoleApplication1 { /// <summary> /// 发送邮件类 的摘要说明 /// </summary&g