java发送电子邮件

首先需要依赖两个jar包

mail.jar   下载地址:http://download.csdn.net/detail/cuiran/4300419

activation.jar 下载地址:http://download.csdn.net/detail/cuiran/4300421


然后导入工程中:

代码如下:

/**
 * Email.java
 * 版权所有(C) 2012 
 * 创建:cuiran 2012-05-11 12:52:41
 */
package com.wpn.email.test;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
/**
 * 本程序用java来实现Email的发送,所用到的协议为:SMTP,端口号为25;<br>
 * 方法:用Socket进行实现,打开客户端的Socket,并连接上服务器:<br>
 * 如:Socket sockClient = new Socket("smtp.qq.com",23);<br>
 * 这表示发件方连接的是QQ邮箱的服务器,端口号为23
 * @author cuiran
 * @version 1.0.0
 */
public class Email
{
	/**
	 * 整个MIME邮件对象
	 */
	private MimeMessage	mimeMsg;
	/**
	 * 专门用来发送邮件的Session会话
	 */
	private Session		session;
	/**
	 * 封装邮件发送时的一些配置信息的一个属性对象
	 */
	private Properties	props;
	/**
	 * 发件人的用户名
	 */
	private String		username;
	/**
	 * 发件人的密码
	 */
	private String		password;
	/**
	 * 用来实现附件添加的组件
	 */
	private Multipart	mp;
	/**
	 * 发送参数初始化,有的服务器不需要用户验证,所以这里对用户名和密码进行初始化""
	 * 
	 * @param smtp
	 *            SMTP服务器的地址,比如要用QQ邮箱,哪么应为:"smtp.qq.com",163为:"smtp.163.com"
	 */
	public Email(String smtp)
	{
		username = "";
		password = "";
		// 设置邮件服务器
		setSmtpHost(smtp);
		// 创建邮件
		createMimeMessage();
	}
	/**
	 * 设置发送邮件的主机(JavaMail需要Properties来创建一个session对象。
	 * 它将寻找字符串"mail.smtp.host",属性值就是发送邮件的主机);
	 * 
	 * @param hostName
	 */
	public void setSmtpHost(String hostName)
	{
		System.out.println("设置系统属性:mail.smtp.host = " + hostName);
		if (props == null)
			props = System.getProperties();
		props.put("mail.smtp.host", hostName);
	}
	/**
	 * (这个Session类代表JavaMail 中的一个邮件session. 每一个基于
	 * JavaMail的应用程序至少有一个session但是可以有任意多的session。 在这个例子中,
	 * Session对象需要知道用来处理邮件的SMTP 服务器。
	 */
	public boolean createMimeMessage()
	{
		try
		{
			System.out.println("准备获取邮件会话对象!");
			// 用props对象来创建并初始化session对象
			session = Session.getDefaultInstance(props, null);
		}
		catch (Exception e)
		{
			System.err.println("获取邮件会话对象时发生错误!" + e);
			return false;
		}
		System.out.println("准备创建MIME邮件对象!");
		try
		{
			// 用session对象来创建并初始化邮件对象
			mimeMsg = new MimeMessage(session);
			// 生成附件组件的实例
			mp = new MimeMultipart();
		}
		catch (Exception e)
		{
			System.err.println("创建MIME邮件对象失败!" + e);
			return false;
		}
		return true;
	}
	/**
	 * 设置SMTP的身份认证
	 */
	public void setNeedAuth(boolean need)
	{
		System.out.println("设置smtp身份认证:mail.smtp.auth = " + need);
		if (props == null)
		{
			props = System.getProperties();
		}
		if (need)
			props.put("mail.smtp.auth", "true");
		else
			props.put("mail.smtp.auth", "false");
	}
	/**
	 * 进行用户身份验证时,设置用户名和密码
	 */
	public void setNamePass(String name, String pass)
	{
		System.out.println("程序得到用户名与密码");
		username = name;
		password = pass;
	}
	/**
	 * 设置邮件主题
	 * 
	 * @param mailSubject
	 * @return
	 */
	public boolean setSubject(String mailSubject)
	{
		System.out.println("设置邮件主题!");
		try
		{
			mimeMsg.setSubject(mailSubject);
		}
		catch (Exception e)
		{
			System.err.println("设置邮件主题发生错误!");
			return false;
		}
		return true;
	}
	/**
	 * 设置邮件内容,并设置其为文本格式或HTML文件格式,编码方式为UTF-8
	 * 
	 * @param mailBody
	 * @return
	 */
	public boolean setBody(String mailBody)
	{
		try
		{
			System.out.println("设置邮件体格式");
			BodyPart bp = new MimeBodyPart();
			bp.setContent("<meta http-equiv=Content-Type content=text/html; charset=UTF-8>" + mailBody,
							"text/html;charset=UTF-8");
			// 在组件上添加邮件文本
			mp.addBodyPart(bp);
		}
		catch (Exception e)
		{
			System.err.println("设置邮件正文时发生错误!" + e);
			return false;
		}
		return true;
	}
	/**
	 * 增加发送附件
	 * 
	 * @param filename
	 *            邮件附件的地址,只能是本机地址而不能是网络地址,否则抛出异常 
	 * @return
	 */
	public boolean addFileAffix(String filename)
	{
		System.out.println("增加邮件附件:" + filename);
		try
		{
			BodyPart bp = new MimeBodyPart();
			FileDataSource fileds = new FileDataSource(filename);
			bp.setDataHandler(new DataHandler(fileds));
			// 发送的附件前加上一个用户名的前缀
			bp.setFileName(fileds.getName());
			// 添加附件
			mp.addBodyPart(bp);
		}
		catch (Exception e)
		{
			System.err.println("增加邮件附件:" + filename + "发生错误!" + e);
			return false;
		}
		return true;
	}
	/**
	 * 设置发件人地址
	 * 
	 * @param from
	 *            发件人地址
	 * @return
	 */
	public boolean setFrom(String from)
	{
		System.out.println("设置发信人!");
		try
		{
			mimeMsg.setFrom(new InternetAddress(from));
		}
		catch (Exception e)
		{
			return false;
		}
		return true;
	}
	/**
	 * 设置收件人地址
	 * 
	 * @param to
	 *            收件人的地址
	 * @return
	 */
	public boolean setTo(String to)
	{
		System.out.println("设置收信人");
		if (to == null)
			return false;
		try
		{
			mimeMsg.setRecipients(javax.mail.Message.RecipientType.TO, InternetAddress.parse(to));
		}
		catch (Exception e)
		{
			return false;
		}
		return true;
	}
	/**
	 * 发送附件
	 * 
	 * @param copyto
	 * @return
	 */
	public boolean setCopyTo(String copyto)
	{
		System.out.println("发送附件到");
		if (copyto == null)
			return false;
		try
		{
			mimeMsg.setRecipients(javax.mail.Message.RecipientType.CC, InternetAddress.parse(copyto));
		}
		catch (Exception e)
		{
			return false;
		}
		return true;
	}
	/**
	 * 发送邮件
	 * 
	 * @return
	 */
	public boolean sendout()
	{
		try
		{
			mimeMsg.setContent(mp);
			mimeMsg.saveChanges();
			System.out.println("正在发送邮件....");
			Session mailSession = Session.getInstance(props, null);
			Transport transport = mailSession.getTransport("smtp");
			// 真正的连接邮件服务器并进行身份验证
			transport.connect((String) props.get("mail.smtp.host"), username, password);
			// 发送邮件
			transport.sendMessage(mimeMsg, mimeMsg.getRecipients(javax.mail.Message.RecipientType.TO));
			System.out.println("发送邮件成功!");
			transport.close();
		}
		catch (Exception e)
		{
			System.err.println("邮件发送失败!" + e.getMessage());
			e.printStackTrace();
			return false;
		}
		return true;
	}
	public static void main(String[] args)
	{
		/**
		 *
		 *************切切注意********
		 *
		 *注意  用此程序发邮件必须邮箱支持smtp服务  在2006年以后申请的163邮箱是不支持的
		 *我知道sina邮箱  sohu邮箱 qq邮箱支持  但是sina和qq邮箱需要手工设置开启此功能	
		 *所以在测试时最好使用这三个邮箱	
		 *sina邮箱的smtp设置方法如下
		 *登录sina邮箱 依次点击 邮箱设置--->帐户--->POP/SMTP设置 将开启复选框选中 然后保存
		 *
		 *************切切注意********
		 */
		Email themail = new Email("smtp.163.com");//这里以新浪邮箱为例子
		String mailbody = "<a href='http://www.wphtu.ah.cn/' target='_blank'>芜湖职业技术学院</a>发送成功了哦";//邮件正文
		themail.setNeedAuth(true);
		themail.setSubject("JAVA发邮件的测试");//邮件主题
		themail.setBody(mailbody);//邮件正文
		themail.setTo("115621060@qq.com");//收件人地址
		themail.setFrom("cuiran2001@163.com");//发件人地址
		themail.addFileAffix("F:/download/email.rar");// 附件文件路径,例如:C:/222.jpg,*注;"/"的写法; 如果没有可以不写
		themail.setNamePass("cuiran2001@163.com", "****");//发件人地址和密码 **改为相应邮箱密码
		themail.sendout();
	}
}


  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cuiran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值