javaMail 发送邮件

第一次写博客   有什么不对的地方    请指出  谢谢

话不多说   直接上代码

	 /**
	 * @Title: sendMessage
	 * @Description: 发送邮件
	 * @param isAuth   是否验证  true  是  
	 * @param smtpHost  发送 服务器地址
	 * @param smtpPort 发送邮件需要的端口
	 * @param isSSL    是否 使用 SSL 协议证书   
	 * @param fromUser 发件人地址
	 * @param fromUserPassword  发件人邮箱密码 
	 * @param toUsers  发件人地址
	 * @param ccUsers  抄送人 地址
	 * @param bccUsers  密送人 地址
	 * @param title    邮件标题
	 * @param messageText   邮件  内容
	 * @param messageType   邮件 内容的 类型
	 * @param files			附件
	 * @throws Exception    
	 */
	public static void sendMessage(boolean isAuth,String smtpHost,String smtpPort,boolean isSSL, String fromUser,
			String fromUserPassword, List<String> toUsers,List<String> ccUsers,List<String> bccUsers, String title,
			String messageText, String messageType,List<File> files) throws Exception {
		/** 参数验证   开始 */
		if(StringUtils.isEmpty(smtpHost)){
			throw new NullPointerException("smtpHost is Required");
		}
		if(StringUtils.isEmpty(smtpPort)){
			throw new NullPointerException("smtpPort is Required");
		}
		if (isAuth) {
			if(StringUtils.isEmpty(fromUser)){
				throw new NullPointerException("fromUser is Required");
			}
			if(StringUtils.isEmpty(fromUserPassword)){
				throw new NullPointerException("fromUserPassword is Required");
			}
		}
		if(StringUtils.isEmpty(title)){
			throw new NullPointerException("title is Required");
		}
		if(StringUtils.isEmpty(messageText)){
			throw new NullPointerException("messageText is Required");
		}
		if (StringUtils.isEmpty(messageType)) {
			messageType = "text/html;charset=gb2312";
		}
		if(toUsers==null||toUsers.size()<1){
			throw new NullPointerException("toUsers is Required");
		}
		if (ccUsers==null||ccUsers.size()<1) {
			ccUsers = new ArrayList<String>();
		}
		if (bccUsers==null||bccUsers.size()<1) {
			bccUsers = new ArrayList<String>();
		}
		if (files==null||files.size()<1) {
			files = new ArrayList<File>();
		}
		/** 参数验证   结束  */
		
		//Session对象 所需要的参数
		Properties props = System.getProperties();
		//发送 服务器地址 
		props.setProperty("mail.smtp.host", smtpHost);
		//发送邮件需要的端口  这个端口 是和 发送服务器 地址 相关联的    不用的服务器地址 端口号是不同的
		props.setProperty("mail.smtp.port", smtpPort);
		//验证
		props.put("mail.smtp.auth", isAuth ? "true":"false");
		//是否 使用  STARTTLS 加密传输
		props.setProperty("mail.smtp.starttls.enable","true");
		//是否 使用 SSL 协议证书   
		props.setProperty("mail.smtp.ssl.enable", isSSL ? "true":"false");
		//这是看 Properties 日志的  真正上线后 可以 不用设置   默认 为 false
		props.put("mail.debug", "true");
		//Session对象
		Session mailSession = null;
		if (isAuth) {
			mailSession = Session.getInstance(props,new Authenticator() {
				//验证    也可以写一个类  继承 Authenticator 重写  getPasswordAuthentication 
				@Override
				protected PasswordAuthentication getPasswordAuthentication() {
					return new PasswordAuthentication(fromUser,fromUserPassword);
				}
			});
		}else {
			mailSession = Session.getInstance(props);
		}
		//这是看 Session 日志的  真正上线后 可以 不用设置   默认 为 false
		mailSession.setDebug(true);
		//得到 message 对象
		MimeMessage message = new MimeMessage(mailSession);

		//发件人地址
		InternetAddress fromAddress = new InternetAddress(fromUser);
		// 设置发件人
		message.setFrom(fromAddress);
		// 这里有几种方法
		//直接循环 一个一个 添加 到message中  
		{
			for (String toUser : toUsers) {
				InternetAddress toAddress = new InternetAddress(toUser);
				//用 addRecipient 方法  设置 收件人
				message.addRecipient(RecipientType.TO, toAddress);
			}
		}
		/**
		//组装成 Address[] 数组    然后 在添加到 mesage中
		{
			Address[] toUsersAddresses = new Address[toUsers.size()];
			for (int i = 0; i < toUsers.size(); i++) {
				String toUser = toUsers.get(i);
				InternetAddress toAddress = new InternetAddress(toUser);
				toUsersAddresses[i] = toAddress;
			}
			//用 addRecipients 方法  
			message.addRecipients(RecipientType.TO,toUsersAddresses);
		}

		//还可以直接用string 添加 到 mesage中
		{
			//这里 主要是  拼成  xx@123.com,xx@123.com 这种形式    用英文逗号(,)分隔的形式  
			//也可以用其他方法
			StringBuffer toUsersAddresses  = new StringBuffer();
			for (String toUser : toUsers) {
				toUsersAddresses.append(toUser+",");
			}
			String toUserAddresses = toUsersAddresses.substring(0, toUsersAddresses.length()-1);
			//用 addRecipients 方法 .  
			//这个方法 在源码中 同样 也是转换成了  InternetAddress[] 数组  .  InternetAddress 类 是Address 的子类
			//InternetAddress.parse(addresses)   参数是string 返回 InternetAddress[] 数组  .
			message.addRecipients(RecipientType.TO,toUserAddresses);
		}
		*/
		for (String ccUser : ccUsers) {
			InternetAddress ccAddress = new InternetAddress(ccUser);
			//设置 抄送人 地址
			message.addRecipient(RecipientType.CC, ccAddress);
		}
		for (String bccUser : bccUsers) {
			InternetAddress bccAddress = new InternetAddress(bccUser);
			//设置 密送人 地址
			message.addRecipient(RecipientType.BCC, bccAddress);
		}
		//设置 发送 时间
		message.setSentDate(Calendar.getInstance().getTime());
		//设置标题
		message.setSubject(title);
		//设置 邮件内容
		//用  Multipart 设置参数
		Multipart multipart = new MimeMultipart();
		//循环 文件  分别 添加 到 Multipart 中
		for (File file : files) {
			//设置  内容
			MimeBodyPart mimeBodyPart = new MimeBodyPart();
			//设置 文件 
			DataSource dataSource = new FileDataSource(file);
			// 设置 内容  头
			DataHandler dataHandler = new DataHandler(dataSource);
			mimeBodyPart.setDataHandler(dataHandler);
			//  MimeUtility.encodeText()   这个发放 是为了方式乱码的
			mimeBodyPart.setFileName(MimeUtility.encodeText(dataHandler.getName()));
			multipart.addBodyPart(mimeBodyPart);
		}
		//设置  消息体
		BodyPart part = new MimeBodyPart();
		part.setContent(messageText, messageType);
		multipart.addBodyPart(part);
		// 将  消息体 和 附件 放到  message 消息 中
		message.setContent(multipart);
		//发送消息
		Transport.send(message);
	}



当然,在发送邮件时  也可以用 代理 。


还有就是  有的一些   邮箱  需要 在网页端 设置   安全  之类的 , 163 等 一些 需要 在  网页端 设置   开通 smtp 和 pop3 .


是否 开启 SSL 安全   也是 在 网页端看  或者  foxmail  中账户 管理中 也有。





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值