以前的时候想着java发邮件很简单,因为当时使用的是outlook实现的,有兴趣的可以去看看之前的两篇博客文章,1.使用java底层实现邮件的发送(含测试,源码) 和 2.使用Spring实现邮件的发送(含测试,注释,源码)
就在今天,遇到的需求是给一个QQ邮箱发一份邮件,刚看到需求一看,这不很简单么,随便改改就行了。
于是我花了15分钟写出来全部代码,但是花了2小时解决了代码的bug.........自己都有点佩服了!下面我来说说我的bug是怎么遇到的和怎么解决的。
第一,发给QQ邮箱与outlook不一样的是,<property name="host" value="smtp.qq.com"></property>,而outlook的则是<property name="host" value="mail.com"></property>
第二,<property name="password" value="***********"></property>,而Outlook的密码可以直接就是你当初设置的密码,但是在这里是QQ邮箱的授权码,所谓的授权码,就是你开启了QQ邮箱的
之后,会出来的。
第三,设置
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.ssl.enable">true</prop>
</props>
</property>
而outlook可以没有他,直接就可以。QQ邮箱的绝对不行,就这句话折腾了我好久,这句话的意思就是SSL加密。
第四,这个与outlook一样,添加附件是不能添加文件夹的!不能添加文件夹的!不能添加文件夹的!!!一定要记住,别自作聪明的找方法,比如像我一样吧JavaMail里面的Folder抽象类里面的方法挨个试了试。。。。。没有半点用,还浪费了好多时间,你要想添加多个附件的话你丫的可以打包啊,我当初怎么就没有想到呢,只要有个后缀名就可以添加,打包成.zip 或者 .rar 都可以,调用的类是:
FileDataSource file1 = new FileDataSource(new File("E:\\Edisk\\java\\springDemo.rar"));
helper.addAttachment(file1.getName(), file1);
接下来我上一下源码吧:
applicationContext.xml里面的配置:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> <bean id="javaMail" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="smtp.qq.com"></property> <property name="defaultEncoding" value="utf-8"></property> <property name="username" value="2451999120"></property> <property name="password" value="dldadavrtfbedida"></property> <property name="protocol" value="smtp"></property> <property name="javaMailProperties"> <props> <prop key="mail.smtp.auth">true</prop> <prop key="mail.smtp.ssl.enable">true</prop> </props> </property> </bean> <bean id="mailService" class="org.service.impl.MailServiceImpl"> <property name="javaMailSender" ref="javaMail"></property> </bean> </beans>
MailServiceImpl实现类里面的代码:
/** * @Title: MailServiceImpl.java * @Package org.service.impl * @Description: TODO该方法的主要作用: * @author A18ccms A18ccms_gmail_com * @date 2017-6-1 下午12:17:11 * @version V1.0 */ package org.service.impl; import java.io.File; import javax.activation.FileDataSource; import javax.mail.Folder; import javax.mail.MessagingException; import javax.mail.Store; import javax.mail.internet.MimeMessage; import org.service.IMailService; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; /** * * 项目名称:spring_Cchop8 * 类名称:MailServiceImpl * 类描述: * 创建人:Mu Xiongxiong * 创建时间:2017-6-1 下午12:17:11 * 修改人:Mu Xiongxiong * 修改时间:2017-6-1 下午12:17:11 * 修改备注: * @version * */ public class MailServiceImpl implements IMailService { private JavaMailSender javaMailSender; /**(非 Javadoc) * <p>Title: sendMail</p> * <p>Description(描述): </p> * @see org.service.IMailService#sendMail() */ @Override public void sendMail() { //发送带格式的邮件 MimeMessage message = javaMailSender.createMimeMessage(); try { MimeMessageHelper helper = new MimeMessageHelper(message,true,"utf-8"); helper.setFrom("2451999120@qq.com"); helper.setTo("1513614984@qq.com"); helper.setSubject("穆雄雄"); helper.setText("<span style='color:red'>》》》这是原来的字体</span> <strong>》》》这是加粗的字体</strong> >>>这个是链接 <a href='http://baidu.com'>点击进入</a>",true); //内容 //添加一个附件 FileDataSource file1 = new FileDataSource(new File("E:\\Edisk\\java\\spring_Cchop8.rar")); helper.addAttachment(file1.getName(), file1); } catch (MessagingException e) { // TODO 异常执行块! e.printStackTrace(); } javaMailSender.send(message); } public JavaMailSender getJavaMailSender() { return javaMailSender; } public void setJavaMailSender(JavaMailSender javaMailSender) { this.javaMailSender = javaMailSender; } }
结束!!!