使用spring框架中的组件发送邮件功能说明

Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。

首先进入自己的QQ邮箱,在设置中修改账户信息

然后来至底部

点击开启,再用手机发送对应信息到指定号码,然后点击我已发送

获取授权码

注意提示:

到这里,相信你已经开通了SMTP服务,这样就可以在java code发送邮件了

接下来的是Spring 中使用邮件服务

首先是配置信息使用的是587端口,刚开始用465端口我纠结了好久(使用465端口的错误详情),用不了,你可以尝试,默认的25端口应该也是不适合的

<!-- 邮件服务 -->

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">

<property name="host" value="smtp.qq.com"/>

<property name="port" value="587"/>//或许你可以用465端口,默认的25不适合

<property name="protocol" value="smtp"/>

<property name="username" value="785427346@qq.com"/>

<property name="password" value="xxxxxxxxxxxx"/>//这里的是你通过短信后,获取的授权码

<property name="defaultEncoding" value="UTF-8"/>

<property name="javaMailProperties">

<props>

<prop key="mail.smtp.auth">true</prop>

<prop key="mail.smtp.timeout">25000</prop>

</props>

</property>

</bean>

<!-- this is a template message that we can pre-load with default state -->

<bean id="templateMessage" class="org.springframework.mail.SimpleMailMessage">

<property name="from" value="785427346@qq.com"/>

<property name="subject" value="尝试发邮件"/>

</bean>

<bean id="orderManager" class="cn.cherish.common.SimpleOrderManager">

<property name="mailSender" ref="mailSender"/>

<property name="templateMessage" ref="templateMessage"/>

</bean>

用maven引入的jar包

<!-- 邮件 -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context-support</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>javax.mail</groupId>

<artifactId>mail</artifactId>

<version>1.4.7</version>

</dependency>

下面只是一个工具类作简单例子,请勿见怪

package cn.cherish.common;

import java.io.BufferedReader;

import java.io.File;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.URL;

import java.net.URLConnection;

import java.util.Properties;

import javax.mail.MessagingException;

import javax.mail.internet.MimeMessage;

import org.springframework.core.io.FileSystemResource;

import org.springframework.mail.MailException;

import org.springframework.mail.SimpleMailMessage;

import org.springframework.mail.javamail.JavaMailSenderImpl;

import org.springframework.mail.javamail.MimeMessageHelper;

/**

* 项目名称:springmvc_hibernate

* 类名称:MailUtil

* 类描述:

* 创建人:Cherish

* 联系方式:785427346@qq.com

* 创建时间:2016年4月22日 下午3:51:48

* @version 1.0

*/

public class MailUtil {

private static final String HOST = "smtp.qq.com";

private static final String SMTP = "smtp";

private static final String USERNAME = "785427346@qq.com";

private static final String PASSWORD = "xxxxxxxxxx";

private static final int PORT = 587;//587/465

private static final String DEFAULTENCODING = "UTF-8";

private static JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();

private static Properties prop = new Properties();

static{

// 设定mail server

senderImpl.setHost(HOST);

senderImpl.setProtocol(SMTP);

senderImpl.setUsername(USERNAME);

senderImpl.setPassword(PASSWORD);

senderImpl.setPort(PORT);

senderImpl.setDefaultEncoding(DEFAULTENCODING);

// 设定properties

prop.put("mail.smtp.auth", "true");

prop.put("mail.smtp.timeout", "25000");

//设置调试模式可以在控制台查看发送过程

prop.put("mail.debug", "true");

senderImpl.setJavaMailProperties(prop);

}

public static void main(String args[]) {

// 设置收件人,寄件人 用数组发送多个邮件

// String[] array = new String[] {"88888@qq.com","666666@qq.com","999999999@qq.com",USERNAME};

String[] array = new String[] {USERNAME};

String subject = "Cherish内嵌图片、音乐的邮件";

// StringBuffer sb = new StringBuffer();

// try {

// URL url = new URL("http://www.imooc.com/");//http://android-studio.org/

//

// URLConnection conn = url.openConnection();

// InputStream is = conn.getInputStream();

//

// BufferedReader reader = new BufferedReader(new InputStreamReader(is));

//

// String string = null;

// while ((string = reader.readLine()) != null) {

// sb.append(string);

// }

//

// //System.out.println(sb.toString());

//

// } catch (Exception e) {

// e.printStackTrace();

// }

//

// boolean result = htmlMail(array, subject, sb.toString());

String filePath = "E:/javaxmail.png";

String html = "<html><head>"+

"</head><body>"+

"<audio src='http://m10.music.126.net/20160422225433/25b43b999bcdaf3425b9194514340596/ymusic/8c94/b9af/69e3/7ebe35b8e00154120822550b21b0c9c5.mp3' autoplay='autoplay' controls='controls' loop='-1'>爱你</audio>"+

"<h1>Hello,Nice to meet you!</h1>"+

"<span style='color:red;font-size:36px;'>并摸了一把你的小奶</span>"+

"<img src='cid:javaxmail.png'>"+

"</body></html>";

boolean result = inlineFileMail(array, subject, html, filePath);

if (result) {

System.out.println("发送邮件成功。。。。");

}

}

/**

* 发送简单邮件

* @param to 收件人邮箱

* @param subject 主题

* @param content 内容

* @return

*/

public static boolean singleMail(String to, String subject, String content){

String[] array = new String[] {to};

return singleMail(array, subject, content);

}

/**

* 发送简单文本邮件

* @param to 收件人邮箱数组

* @param subject 主题

* @param content 内容

* @return

*/

public static boolean singleMail(String[] to, String subject, String content){

boolean result = true;

SimpleMailMessage mailMessage = new SimpleMailMessage();

// 设置收件人,寄件人 用数组发送多个邮件

mailMessage.setTo(to);

mailMessage.setFrom(USERNAME);

mailMessage.setSubject(subject);

mailMessage.setText(content);

// 发送邮件

try {

senderImpl.send(mailMessage);

} catch (MailException e) {

e.printStackTrace();

result = false;

}

return result;

}

/**

* 发送html邮件

* @param to 收件人

* @param subject 主题

* @param html html代码

* @return

*/

public static boolean htmlMail(String[] to, String subject, String html){

boolean result = true;

MimeMessage mailMessage = senderImpl.createMimeMessage();

MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage);

try {

// 设置收件人,寄件人 用数组发送多个邮件

messageHelper.setTo(to);

messageHelper.setFrom(USERNAME);

messageHelper.setSubject(subject);

// true 表示启动HTML格式的邮件

messageHelper.setText(html, true);

// 发送邮件

senderImpl.send(mailMessage);

} catch (MessagingException e) {

result = false;

e.printStackTrace();

}

return result;

}

/**

* 发送内嵌图片的邮件 (cid:资源名)

* @param to 收件人邮箱

* @param subject 主题

* @param html html代码

* @param imgPath 图片路径

* @return

*/

public static boolean inlineFileMail(String[] to, String subject, String html, String filePath){

boolean result = true;

MimeMessage mailMessage = senderImpl.createMimeMessage();

try {

//设置true开启嵌入图片的功能

MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true);

// 设置收件人,寄件人 用数组发送多个邮件

messageHelper.setTo(to);

messageHelper.setFrom(USERNAME);

messageHelper.setSubject(subject);

// true 表示启动HTML格式的邮件

messageHelper.setText(html, true);

FileSystemResource file = new FileSystemResource(new File(filePath));

messageHelper.addInline(file.getFilename(), file);

// 发送邮件

senderImpl.send(mailMessage);

} catch (MessagingException e) {

result = false;

e.printStackTrace();

}

return result;

}

/**

* 发送带附件的邮件

* @param to

* @param subject

* @param html

* @param filePath

* @return

*/

public static boolean attachedFileMail(String[] to, String subject, String html, String filePath){

boolean result = true;

MimeMessage mailMessage = senderImpl.createMimeMessage();

try {

// multipart模式 为true时发送附件 可以设置html格式

MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true,"utf-8");

// 设置收件人,寄件人 用数组发送多个邮件

messageHelper.setTo(to);

messageHelper.setFrom(USERNAME);

messageHelper.setSubject(subject);

// true 表示启动HTML格式的邮件

messageHelper.setText(html, true);

FileSystemResource file = new FileSystemResource(new File(filePath));

// 这里的方法调用和插入图片是不同的。

messageHelper.addAttachment(file.getFilename(), file);

// 发送邮件

senderImpl.send(mailMessage);

} catch (MessagingException e) {

result = false;

e.printStackTrace();

}

return result;

}

温馨提示:

<img src='cid:javaxmail.png'>

这是内嵌图片的方式 javaxmail.png 要和 messageHelper.addInline(file.getFilename(), file); 这里的 file.getFilename() 相一致就可以

现在只差一步了,那就是Ctrl + F11,有不当之处敬请提出,共同进步

**

使用javax.mail发邮件代码

**

package cn.cherish.utils;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.util.Date;

import java.util.Properties;

import javax.activation.DataHandler;

import javax.activation.DataSource;

import javax.activation.FileDataSource;

import javax.mail.Authenticator;

import javax.mail.BodyPart;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.Multipart;

import javax.mail.PasswordAuthentication;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeBodyPart;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeMessage.RecipientType;

import javax.mail.internet.MimeMultipart;

import javax.mail.internet.MimeUtility;

/**

* 项目名称:springmvc_hibernate

* 类名称:EmailUtil

* 类描述:发送邮件工具类

* 创建人:Cherish

* 联系方式:785427346@qq.com

* 创建时间:2016年4月23日 上午9:48:21

* @version 1.0

*/

public class EmailUtil {

// properties配置文件地址

//private static final String PROPERTIES_PATH = "standard_data.properties";

private static Session session;

private static Properties props = new Properties();

private static final String HOST = "smtp.qq.com";

private static int PORT = 587;

private static final String isAUTH = "true";

private static final String FROM = "785427346@qq.com";

private static final String USERNAME = "785427346@qq.com";

private static final String PASSWORD = "xxxxxxxxxxxxxxxx";

private static final String TIMEOUT = "25000";

private static final String DEBUG = "true";

// 初始化session

static {

props.put("mail.smtp.host", HOST);

props.put("mail.smtp.port", PORT);

props.put("mail.smtp.auth", isAUTH);

props.put("fromer", FROM);

props.put("username", USERNAME);

props.put("password", PASSWORD);

props.put("mail.smtp.timeout", TIMEOUT);

props.put("mail.debug", DEBUG);

session = Session.getInstance(props, new Authenticator() {

@Override

protected PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication(USERNAME, PASSWORD);

}

});

}

public static void main(String[] args) {

try {

String html = "<html><head>"+

"</head><body>"+

"<audio src='http://219.128.78.22/m10.music.126.net/20160423105749/3cee5688a7dc87d28a265fd992ecb0a2/ymusic/8c94/b9af/69e3/7ebe35b8e00154120822550b21b0c9c5.mp3?wshc_tag=1&wsts_tag=571aded1&wsid_tag=b73f773e&wsiphost=ipdbm' autoplay='autoplay' controls='controls' loop='-1'>爱你</audio>"+

"<video controls='controls'>"+

"<source src='http://v2.mukewang.com/45ad4643-87d7-444b-a3b9-fbf32de63811/H.mp4?auth_key=1461379796-0-0-e86cefa71cef963875fd68f8a419dd8a' type='video/mp4' />"+

"Your browser does not support the video tag."+

"</video>"+

"<h1>Hello,nice to fuck you!</h1>"+

"<span style='color:red;font-size:36px;'>并抓了一把你的小鸡鸡</span>"+

"</body></html>";

//sendEmail("785427346@qq.com", "yeah", html, true);

sendFileEmail("785427346@qq.com", "yeah", html, new File("E:/xiaoming.zip"));

} catch (Exception e) {

e.printStackTrace();

}

}

/**

*

* @Title sendEmail

* @Description 通过isHtml判断发送的邮件的内容

* @param to 邮件接收者

* @param content 邮件内容

* @param isHtml 是否发送html

* @throws MessagingException

* @throws IOException

* @throws FileNotFoundException

* @throws EmailException

*/

public static void sendEmail(String to, String title, String content, boolean isHtml)

throws FileNotFoundException, IOException, MessagingException {

String fromer = props.getProperty("fromer");

if (isHtml) {

sendHtmlEmail(fromer, to, title, content);

} else {

sendTextEmail(fromer, to, title, content);

}

}

// 发送纯文字邮件

public static void sendTextEmail(String from, String to, String subject, String content)

throws FileNotFoundException, IOException, MessagingException {

Message message = new MimeMessage(session);

message.setFrom(new InternetAddress(from));

message.setRecipient(RecipientType.TO, new InternetAddress(to));

message.setSubject(subject);

message.setText(content);

message.setSentDate(new Date());

Transport.send(message);

}

// 发送有HTML格式邮件

public static void sendHtmlEmail(String from, String to, String subject, String htmlConent)

throws FileNotFoundException, IOException, MessagingException {

Message message = new MimeMessage(session);

message.setFrom(new InternetAddress(from));

message.setRecipient(RecipientType.TO, new InternetAddress(to));

message.setSubject(subject);

message.setSentDate(new Date());

Multipart multi = new MimeMultipart();

BodyPart html = new MimeBodyPart();

html.setContent(htmlConent, "text/html; charset=utf-8");

multi.addBodyPart(html);

message.setContent(multi);

Transport.send(message);

}

// 发送带附件的邮件

public static void sendFileEmail(String to, String subject, String htmlConent, File attachment)

throws FileNotFoundException, IOException, MessagingException {

Message message = new MimeMessage(session);

String fromer = props.getProperty("fromer");

message.setFrom(new InternetAddress(fromer));

message.setRecipient(RecipientType.TO, new InternetAddress(to));

message.setSubject(subject);

message.setSentDate(new Date());

// 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件

Multipart multipart = new MimeMultipart();

// 添加邮件正文

BodyPart contentPart = new MimeBodyPart();

contentPart.setContent(htmlConent, "text/html;charset=UTF-8");

multipart.addBodyPart(contentPart);

// 添加附件的内容

if (attachment != null) {

BodyPart attachmentBodyPart = new MimeBodyPart();

DataSource source = new FileDataSource(attachment);

attachmentBodyPart.setDataHandler(new DataHandler(source));

// 网上流传的解决文件名乱码的方法,其实用MimeUtility.encodeWord就可以很方便的搞定

// 这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码

// sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();

// messageBodyPart.setFileName("=?GBK?B?" +

// enc.encode(attachment.getName().getBytes()) + "?=");

// MimeUtility.encodeWord可以避免文件名乱码

attachmentBodyPart.setFileName(MimeUtility.encodeWord(attachment.getName()));

multipart.addBodyPart(attachmentBodyPart);

}

message.setContent(multipart);

Transport.send(message);

}

}

总结

以上所述是小编给大家介绍的使用spring框架中的组件发送邮件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

以上是 使用spring框架中的组件发送邮件功能说明 的全部内容, 来源链接: utcz.com/p/215278.html

回到顶部