`

使用spring发送邮件例

    博客分类:
  • java
阅读更多

做了个spring发送纯文本文件以及发送带附件的邮件的例子,共享之。
      1. SpringMail类
     

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessagePreparator;

import javax.mail.internet.MimeMessage;
import javax.mail.MessagingException;
import javax.mail.Message;
import javax.mail.internet.InternetAddress;
import javax.activation.FileDataSource;
import javax.activation.DataHandler;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeBodyPart;
import javax.mail.Multipart;

import java.util.List;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;

/** *//**
 * spring的邮件发送例子
 * 
@author Amigo Xie(xiexingxing1121@126.com)
 * 
@since 2007/04/28 11:30
 
*/

public class SpringMail {

    
public static void main(String[] args) throws Exception {
        ApplicationContext ctx 
= new FileSystemXmlApplicationContext(
                
"src/applicationContext.xml");
        JavaMailSender sender 
= (JavaMailSender) ctx.getBean("mailSender");
        SpringMail springMail 
= new SpringMail();
        
        
//测试发送只有文本信息的简单测试
        springMail.sendTextMail(sender);
        
        
//测试发送带附件的邮件
        springMail.sendMimeMessage(sender);
    }

    
    
/** *//**
     * 测试发送只有文本信息的简单测试
     * 
@param sender 邮件发送器
     * 
@throws Exception
     
*/

    
private void sendTextMail(JavaMailSender sender) throws Exception {
        SimpleMailMessage mail 
= new SimpleMailMessage();
        mail.setTo(
"xiexingxing1121@126.com");
        mail.setFrom(
"xiexingxing1121@126.com");
        mail.setSubject(
"test by amigo");
        mail.setText(
"spring Mail的简单测试");
        sender.send(mail);
        
        System.out.println(
"成功发送文本文件!");
    }

    
    
/** *//**
     * 发送带附件的邮件
     * 
@param sender 邮件发送器 
     * 
@throws Exception
     
*/

    
private void sendMimeMessage(final JavaMailSender sender) throws Exception {
        
//附件文件集合
        final List files = new ArrayList();
        MimeMessagePreparator mimeMail 
= new MimeMessagePreparator() {
            
public void prepare(MimeMessage mimeMessage) throws MessagingException {
                mimeMessage.setRecipient(Message.RecipientType.TO, 
                        
new InternetAddress("xiexingxing1121@126.com"));
                mimeMessage.setFrom(
new InternetAddress("xiexingxing1121@126.com"));
                mimeMessage.setSubject(
"Spring发送带附件的邮件""gb2312"); 
                
                Multipart mp 
= new MimeMultipart();
                
                
//向Multipart添加正文
                MimeBodyPart content = new MimeBodyPart();
                content.setText(
"内含spring邮件发送的例子,请查收!");
                
                
//向MimeMessage添加(Multipart代表正文)
                mp.addBodyPart(content);
                files.add(
"src/SpringMail.java");
                files.add(
"src/applicationContext.xml");
                
                
//向Multipart添加附件
                Iterator it = files.iterator();
                
while(it.hasNext()) {
                    MimeBodyPart attachFile 
= new MimeBodyPart();
                    String filename 
= it.next().toString();
                    FileDataSource fds 
= new FileDataSource(filename);
                    attachFile.setDataHandler(
new DataHandler(fds));
                    attachFile.setFileName(fds.getName());
                    mp.addBodyPart(attachFile);
                }

                
                files.clear();
                
                
//向Multipart添加MimeMessage
                mimeMessage.setContent(mp);
                mimeMessage.setSentDate(
new Date());
            }

        }
;

        
//发送带附件的邮件
        sender.send(mimeMail);
        
        System.out.println(
"成功发送带附件邮件!");
    }

}


      2. spring的配置文件
     

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
    
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        
<property name="host">
            
<value>smtp.126.com</value>
        
</property>
        
<property name="javaMailProperties">
            
<props>
                
<prop key="mail.smtp.auth">true</prop>
                
<prop key="mail.smtp.timeout">25000</prop>
            
</props>
        
</property>
        
<property name="username">
            
<value>xiexingxing1121</value>
        
</property>
        
<property name="password">
            
<value><!-- 此处填写密码 --></value>
        
</property>
    
</bean>
</beans>


    刚才发现一bug,当附件名为中文时,会出现中文乱码问题,对sendMimeMessage方法进行了部分修改,如下:
   

               sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
                files.add(
"src/SpringMail.java");
                files.add(
"src/applicationContext.xml");
                files.add(
"src/谢星星.xml");
                
                
//向Multipart添加附件
                Iterator it = files.iterator();
             
while (it.hasNext()) {
                    MimeBodyPart attachFile 
= new MimeBodyPart();
                    String filename 
= it.next().toString();
                    FileDataSource fds 
= new FileDataSource(filename);
                    attachFile.setDataHandler(
new DataHandler(fds));
                    attachFile.setFileName(
"=?GBK?B?"+enc.encode(fds.getName().getBytes())+"?=");
                    mp.addBodyPart(attachFile);
                }
posted on 2007-04-28 13:23 阿蜜果 阅读(3394) 评论(6)  编辑  收藏 所属分类: Spring

<script type="text/javascript"></script>

<!---->

FeedBack:
2007-04-28 14:07 | 王凌华
:) 我直接用javamail也写了一个类似的东西。(ThreadPool实现的压力测试小工具),这里我有几问题:
a.
但是我用126的mailserver的时候,出现这样的错误:

javax.mail.MessagingException: Could not connect to SMTP host: smtp.126.com, port: 25
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:855)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:156)
at javax.mail.Service.connect(Service.java:256)
at javax.mail.Service.connect(Service.java:135)
at javax.mail.Service.connect(Service.java:87)
at com.sun.mail.smtp.SMTPTransport.connect(SMTPTransport.java:93)
at MailSender.run(MailSender.java:172)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)


我用我公司的的两台mailserver都可以顺畅的发mail。

  回复  更多评论
  
2007-04-29 12:47 | 王凌华
据我所知,gmail的发送和接受是需要ssl验证的.

所以我刚才花了点时间去看了一下javamail里面ssl里面是怎么写的.
这是代码片段:

----------------------------------------------------------------------------------
prop.put("mail.smtp.starttls.enable", "true");
prop.put("mail.smtp.socketFactory.fallback", "false");
// props.put("mail.smtp.debug", "true");
prop.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
prop.put("mail.smtp.port", "465");
prop.put("mail.smtp.socketFactory.port", "465");
prop.put("mail.smtps.auth", needAuth);
prop.put("mail.transport.protocol", "smtp");
prop.put("mail.smtp.host", mailServer);
----------------------------------------------------------------------------------

----------------------------------------------------------------------------------
SMTPTransport transport = (SMTPTransport) session
.getTransport("smtps");
----------------------------------------------------------------------------------
我的努力换来的是发送期间的TimeOut, 没有任何迹象表明代码哪里有问题.
... ... ...

最后我终于明白这里用到了465 port. 而我在公司内网内,这个port默认情况下是禁用的. :) -真倒霉.  回复  更多评论
  
2007-09-14 08:27 | LG
import java.io.File;
import javax.mail.MessagingException;
import javax.mail.internet.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;



public class SpringMail {
public static void main(String[] args) throws Exception{

ApplicationContext ctx=new FileSystemXmlApplicationContext("src/applicationContext.xml");

JavaMailSenderImpl sender = (JavaMailSenderImpl)ctx.getBean("mailSender");


SpringMail springMail=new SpringMail();

springMail.sendInit(sender);
}

private void sendInit(JavaMailSenderImpl sender) throws MessagingException {

MimeMessage message = sender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message,true,"GB2312");
helper.setFrom("dongweiyi1125@sina.com");
helper.setTo("dongweiyi1125@sina.com");
helper.setSubject("Test");
helper.setText("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\"></head><body><h1><a href='#'>郁闷!"
+ "<img src=\"cid:identifier\"></body></html>", true);

FileSystemResource res = new FileSystemResource(new File("c:/weiyi.jpg"));
helper.addInline("identifier", res);


try {
sender.send(message);
} catch (MailException e) {
e.printStackTrace();
}
System.out.println("成功发送内嵌文件");
}
}


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "
评论

相关推荐

    Spring Boot整合邮件发送并保存历史发送邮箱

    项目主要是使用 Spring Boot 发送邮件,主要的技术点有: 1、Spring Boot +mybatis的整合 2、Spring Boot项目中jsp的使用 3、Spring Boot 发送邮件(文本格式的邮件、发送HTML格式的邮件、发送带附件 的邮件、...

    采用 spring 发送带 附件的邮件(完整示例,带 jar 包)

    本例为完整的采用spring 发送带 附件的邮件。 下载后需要改动的地方: 1.在mail.properties中将接收者邮箱地址(username),邮箱密码换成真实的。 2.在SpringJavaMailDemo类中把发送者和接收者邮箱地址换成真实地址...

    开源框架 Spring Gossip

    RMI Hessian、 Burlap Http Invoker &lt;br&gt;邮件 对于邮件发送服务的支援是由Spring的 org.springframework.mail.MailSender介面所定义,它有两个实作类别, org.springframework.mail.cos....

    Spring3.X编程技术与应用,完整扫描版

    Spring的任务执行与调度、Spring Web应用的国际化支持、AJAX和Spring结合的访问模式、利用Spring发 送电子邮件、Spring JMS消息应用编程、教学资源全文检索设计、Java应用的报表打印、网络考试系统设 计、Spring应用...

    Struts+Spring+Hbernate登录模块简单例子

    一个简单的Struts+Spring+Hibernate的登录模块的代码,含数据库代码和部分简单说明(适合刚接触Struts+Spring+Hibernate框架的... 在学习使用中如有任何问题,请发邮件到tigerlion@126.com,本人一定会尽快回复!

    FreeMarker模板实现邮件发送

    1.这是一个在根目录下的mail.properties文件中配好发送邮件地址和接收邮箱地址的实例,利用freeMarker模板作为展示,在测试类中提供配固定接收邮箱地址和手动输入接收邮箱地址两种方法进行发送试验,结果都能实现...

    SpringBoot实现发送邮件功能

    主要介绍了SpringBoot 发送邮件功能实现,本文以163邮箱为例通过这个小案例给大家介绍,需要的朋友可以参考下

    SpringBoot-Web-Mvc-Security:以Spring方式构建企业Java应用程序

    搜索和排序数据使用select2 ajax远程数据的分页结果发送带有附件的电子邮件模板多种语言的Web应用程序生成PDF和Excel文件使用Ajax以一种形式上传数据和文件建立和运行mvn packagejava -jar SpringBoot-0.0.1-...

    JAVA上百实例源码以及开源项目源代码

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    JAVA上百实例源码以及开源项目

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    asp.net知识库

    使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能 一完美的关于请求的目录不存在而需要url重写的解决方案! 在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标...

    OneBlog博客系统-其他

    集成JustAuth实现第三方授权登录使用方法(以blog-web项目为例):1、使用IDE导入本项目2、新建数据库CREATE DATABASE dblog;3、导入数据库docs/db/dblog.sql4、初始化数据库docs/db/init_data.sql5、修改配置文件(1...

Global site tag (gtag.js) - Google Analytics