java实现邮箱发送邮件功能

http://www.cnblogs.com/zhangdiIT/p/8184293.html    复制原版) 

邮箱验证是一个很常见的功能了,基本上每个网站都会用的到,java也有专门的jar来处理邮件发送等服务,这里只是简单的实现一下发送邮件的功能,具体jar包就不再提供了,我会把所有需要引用的包都贴出来,方便大家copy。直奔主题:

第一步:封装发件人账号密码

复制代码

1import javax.mail.Authenticator; 2import javax.mail.PasswordAuthentication; 3 4/** 5 * 发件人账号密码 6 * @author zhangdi 7 * 8 */ 9public class MailAuthenticator extends Authenticator{ 10 11 public static String USERNAME = ""; 12 public static String PASSWORD = ""; 13 14 public MailAuthenticator() { 15 } 16 17 protected PasswordAuthentication getPasswordAuthentication() { 18 return new PasswordAuthentication(USERNAME, PASSWORD); 19 } 20 21}

复制代码

第二步:提供发送操作类

复制代码

1import java.util.Date; 2import java.util.Properties; 3import javax.mail.Message; 4import javax.mail.Multipart; 5import javax.mail.Session; 6import javax.mail.Transport; 7import javax.mail.internet.InternetAddress; 8import javax.mail.internet.MimeBodyPart; 9import javax.mail.internet.MimeMessage; 10import javax.mail.internet.MimeMultipart;/** 11 * 邮件发送操作类 12 * 13 * @author zhangdi 14 * 15 */ 16public class MailOperation { 17 18 /** 19 * 发送邮件 20 * @param user 发件人邮箱 21 * @param password 授权码(注意不是邮箱登录密码) 22 * @param host 23 * @param from 发件人 24 * @param to 接收者邮箱 25 * @param subject 邮件主题 26 * @param content 邮件内容 27 * @return success 发送成功 failure 发送失败 28 * @throws Exception 29 */ 30 public String sendMail(String user, String password, String host, 31 String from, String to, String subject, String content) 32 throws Exception { 33 if (to != null){ 34 Properties props = System.getProperties(); 35 props.put("mail.smtp.host", host); 36 props.put("mail.smtp.auth", "true"); 37 MailAuthenticator auth = new MailAuthenticator(); 38 MailAuthenticator.USERNAME = user; 39 MailAuthenticator.PASSWORD = password; 40 Session session = Session.getInstance(props, auth); 41 session.setDebug(true); 42 try { 43 MimeMessage message = new MimeMessage(session); 44 message.setFrom(new InternetAddress(from)); 45 if (!to.trim().equals("")) 46 message.addRecipient(Message.RecipientType.TO, 47 new InternetAddress(to.trim())); 48 message.setSubject(subject); 49 MimeBodyPart mbp1 = new MimeBodyPart(); // 正文 50 mbp1.setContent(content, "text/html;charset=utf-8"); 51 Multipart mp = new MimeMultipart(); // 整个邮件:正文+附件 52 mp.addBodyPart(mbp1); 53 // mp.addBodyPart(mbp2); 54 message.setContent(mp); 55 message.setSentDate(new Date()); 56 message.saveChanges(); 57 Transport trans = session.getTransport("smtp"); 58 trans.send(message); 59 System.out.println(message.toString()); 60 } catch (Exception e){ 61 e.printStackTrace(); 62 return "failure"; 63 } 64 return "success"; 65 }else{ 66 return "failure"; 67 } 68 } 69 70}

复制代码

第三步:测试

复制代码

1public static void main(String[] args) { 2 3 MailOperation operation = new MailOperation(); 4 String user = "你的邮箱地址"; 5 String password = "你的邮箱授权码"; 6 String host = "smtp.163.com"; 7 String from = "你的邮箱地址"; 8 String to = "目标邮箱地址";// 收件人 9 String subject = "输入邮件主题"; 10 //邮箱内容 11 StringBuffer sb = new StringBuffer(); 12 String yzm = RandomUtil.getRandomString(6); 13 sb.append("<!DOCTYPE>"+"<div bgcolor='#f1fcfa' style='border:1px solid #d9f4ee; font-size:14px; line-height:22px; color:#005aa0;padding-left:1px;padding-top:5px; padding-bottom:5px;'><span style='font-weight:bold;'>温馨提示:</span>" 14 + "<div style='width:950px;font-family:arial;'>欢迎使用NET微活动,您的注册码为:<br/><h2 style='color:green'>"+yzm+"</h2><br/>本邮件由系统自动发出,请勿回复。<br/>感谢您的使用。<br/>杭州恩意替电子商务有限公司</div>" 15 +"</div>"); 16 try { 17 String res = operation.sendMail(user, password, host, from, to, 18 subject, sb.toString()); 19 System.out.println(res); 20 } catch (Exception e) { 21 // TODO Auto-generated catch block 22 e.printStackTrace(); 23 } 24 }

复制代码

注意:邮件发送很简单,不过有几个地方需要注意一下:

  1、发件人的密码不是你登录邮箱的密码,而是设置POP3/SMTP/IMAP是获取的授权码,如下图(截取自163邮箱);

  2、如果使用QQ邮箱作为发件邮箱的话,需要专门配置SSL证书等等信息,这是因为QQ邮箱的要求(当然省事的做法就使用企业邮箱或者其他邮箱提供商比如163);

  3、如果使用了其他邮箱服务商提供的邮箱来作为发件人,那么在编辑邮件内容的时候需要注意一些敏感词的问题,如果你的邮件中含有敏感内容的话邮箱服务商将不会为你发送该邮件;

  4、如果是在main方法中调用的话是可以的,但是如果要部署到web容器(比如tomcat)中的话,则需要引入两个jar包

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

swap空间的增减方法

(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap