软件编程
位置:首页>> 软件编程>> java编程>> 使用spring框架中的组件发送邮件功能说明

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

作者:懒鬼鬼  发布时间:2022-12-29 03:53:55 

标签:spring,框架,组件

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

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

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

然后来至底部

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

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

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

获取授权码

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

注意提示:使用spring框架中的组件发送邮件功能说明

到这里,相信你已经开通了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,有不当之处敬请提出,共同进步

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


**
使用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框架中的组件发送邮件网站的支持!

来源:http://www.cnblogs.com/langui/p/7802651.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com