JavaMail应用
 
在日常开发中,可能会引用到发邮件功能,例如在持续集成中,自动化测试运行完毕,自动将测试结果以报表的形式发送邮件给相关人。那么在Java中如何实现发邮件呢?
在java EE   中有个JavaMail插件 是专门解决java收发邮件功能的,下载地址:http://www.oracle.com/technetwork/java/index-138643.html
下载后我们解压压缩包,提取里面的mail.jar,引入到工程中,便可以使用JavaMail API 进行发送邮件了。
 
下面是我根据JavaMail封装的用于发送邮件的方法,使用简单方便,只要填写SMTP 服务器地址,端口,用户名,密码,发送内容,发送人地址,收件人地址即可发送邮件
package net.hk515.utils;
import java.util.Properties; import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage; import java.util.ArrayList; import com.sun.mail.smtp.*; public class SendMail {
private Log log=new Log(SendMail.class);
public static void main(String[] args) {
// TODO 自动生成的方法存根
SendMail sendMail=new SendMail();
sendMail.sendmessage("zhengshuheng@XXX.com", "XXX", "smtp.mxhichina.com", "25", "zhengshuheng@XXX.com", "XXX@XX.com,XXX@XX.com", "测试邮件发送函数", "测试邮件发送函数"); }
/**
*
* @param userName 发送邮箱账号 xxx@xxx.com形式
* @param passWord 发送邮件密码
* @param smtpHost stmp服务器地址
* @param smtpPort smtp服务器端口
* @param from 发件人地址
* @param tos 收件人地址
* @param title 标题
* @param content 内容
*/
public void sendmessage(String userName,String passWord,String smtpHost,String smtpPort,String from,String tos ,String title,String content)
{
Properties smtpProper=setSmtp(smtpHost, smtpPort, userName, passWord);
Auth authenticator=new Auth(userName, passWord);
try { //创建session实例
Session session=Session.getInstance(smtpProper, authenticator);
MimeMessage message=new MimeMessage(session);
session.setDebug(true); //设置from发件人邮箱地址
message.setFrom(new InternetAddress(from));
//收件人to LIST
ArrayList<Address> toList=new ArrayList<Address>();
//收件人字符串通过,号分隔收件人
String[] toArray=tos.split(",");
for (int i = 0; i < toArray.length; i++)
{
String str = toArray[i];
toList.add(new InternetAddress(str));
}
//将收件人列表转换为收件人数组
Address[] addresses=new Address[toList.size()];
addresses=toList.toArray(addresses);
//设置to收件人地址
message.setRecipients(MimeMessage.RecipientType.TO,addresses);
//设置邮件标题
message.setSubject(title);
//设置邮件内容
message.setContent(content, "text/html;charset=UTF-8");
//Transport.send(message);
Transport transport=session.getTransport();
transport.connect(smtpHost,userName, passWord);
transport.sendMessage(message,addresses);
log.info("发送邮件成功!"); } catch (Exception e) {
// TODO: handle exception
log.error("发送邮件失败!");
e.printStackTrace();
} } private Properties setSmtp(String smtpHost,String smtpPort,String userName,String passWord)
{
//创建邮件配置文件
Properties maiProperties=new Properties();
//配置smtp发件服务器
maiProperties.put("mail.transport.protocol", "smtp");
//配置smtp服务器
maiProperties.put("mail.smtp.host", smtpHost);
//配置smtp服务器端口
maiProperties.put("mail.smtp.port", smtpPort);
//配置smtp用户名
maiProperties.put("mail.user", userName);
//配置smtp身份验证
maiProperties.put("mail.smtp.auth", "true");
return maiProperties; } }
//smtp 身份验证类
class Auth extends Authenticator
{
Properties pwdProperties;
//构造函数 public Auth(String userName,String passWord)
{
pwdProperties=new Properties();
try {
pwdProperties.put(userName,passWord);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
//必须实现 PasswordAuthentication 方法
public PasswordAuthentication passwordAuthentication()
{
String userName=getDefaultUserName();
//当前用户在密码表里
if (pwdProperties.containsKey(userName)) {
//取出密码,封装好后返回
return new PasswordAuthentication(userName, pwdProperties.getProperty(userName).toString()); }
else {
//如果当前用户不在密码表里就返回Null
System.out.println("当前用户不存在");
return null; } } }

  

JavaMail应用--通过javamail API实现在代码中发送邮件功能的更多相关文章

  1. linux内核分析作业4:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    系统调用:库函数封装了系统调用,通过库函数和系统调用打交道 用户态:低级别执行状态,代码的掌控范围会受到限制. 内核态:高执行级别,代码可移植性特权指令,访问任意物理地址 为什么划分级别:如果全部特权 ...

  2. ArcGIS API for Silverlight代码中使用Template模板

    原文:ArcGIS API for Silverlight代码中使用Template模板 在项目开发中,会遇到点选中聚焦闪烁效果,但是因为在使用Symbol的时候,会设置一定的OffSetX和OffS ...

  3. 实验--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(杨光)

    使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 攥写人:杨光  学号:20135233 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程 ...

  4. LInux内核分析--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    实验者:江军 ID:fuchen1994 实验描述: 选择一个系统调用(13号系统调用time除外),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3 ...

  5. 实验四——使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    实验目的: 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 实验过程: 查看系统调用列表 get pid 函数 #include <stdio.h> #include & ...

  6. Linux内核设计第四周学习总结 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    陈巧然原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数A ...

  7. 通过库函数API和C代码中嵌入汇编代码剖析系统调用的工作机制

    作者:吴乐 山东师范大学<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 本次实验的主要内容就是分别采用A ...

  8. 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    本周作业的主要内容就是采用gcc嵌入汇编的方式调用system call. 系统调用其实就是操作系统提供的服务.我们平时编写的程序,如果仅仅是数值计算,那么所有的过程都是在用户态完成的,但是我们想将变 ...

  9. linux内核分析第四周-使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    本周作业的主要内容就是采用gcc嵌入汇编的方式调用system call.系统调用其实就是操作系统提供的服务.我们平时编写的程序,如果仅仅是数值计算,那么所有的过程都是在用户态完成的,但是我们想将变量 ...

随机推荐

  1. PHP给图片添加文字水印实例

    PHP给图片添加文字水印实例,支持中文文字水印,是否覆盖原图,自定义设置水印背景色.文字颜色.字体等. 水印类water.class.php var $Path = "./"; / ...

  2. Ruby Rails学习中:注册表单,注册失败,注册成功

    接上篇 一. 注册表单 用户资料页面已经可以访问了, 但内容还不完整.下面我们要为网站创建一个注册表单. 1.使用 form_for 注册页面的核心是一个表单, 用于提交注册相关的信息(名字.电子邮件 ...

  3. 基于C#开发的扩展按钮控件

    最近在准备一套自定义控件开发的课程,下面将第一个做的按钮控件分享给大家. 其实这个控件属于自定义控件中的扩展控件,与组合控件和GDI+开发的控件不同,这个控件是继承原生的Button, 这个控件的目的 ...

  4. css 字体库和动画

    @font-face { font-family:'WebSymbols'; src: url('../font/WebSymbols-Regular.otf'); } .icon{ font-fam ...

  5. 你真的知道em和rem的区别吗?

    前言 em 和 rem 都是相对单位,在使用时由浏览器转换为像素值,具体取决于您的设计中的字体大小设置. 如果你使用值 1em 或 1rem,它可以被浏览器解析成 从16px 到 160px 或其他任 ...

  6. JS基础_非布尔值的与或运算

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. [转载]为什么用Java开发桌面程序的比较少

    这个是本人这几天用javafx开发桌面程序时候想到的,因为虽然javafx比C#之类的确实坑多不少,但是习惯了之后也还行,而且它的一次编译.各处使用真的深得我心.但为什么不流行呢: 作者:bell 来 ...

  8. xpath下载

    1.下载地址,版本号为 2.0.2: 链接: https://pan.baidu.com/s/1GXPm1kMENXhOkefKcEQnlA 密码: 8wwv 2.安装 1).在chrome右上角找到 ...

  9. 深入理解hive(1)

    1.安装和配置: 1.1可以通过这个下载链接去下载hive源码来安装一个一个稳定版本的hive.https://cwiki.apache.org/confluence/display/Hive/Get ...

  10. element-ui中关闭对话框清空验证,清除form表单数据

    对于elementUI中对话框,点击对话框和关闭按钮 怎么清空验证,清空form表单,避免二次点击还会有 验证错误的提示.今天终于自己查资料解决了,分享给大家 1.首先在你的对话框 取消按钮 加一个c ...