`
shihuan830619
  • 浏览: 580911 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在Java中发送电子邮件

    博客分类:
  • J2EE
阅读更多
要先申请一个网易的126邮箱和一个新浪的com邮箱。

以下程序需要3个jar包的支持:
javax.mail-1.5.1.jar
activation-1.1.1.jar
org.springframework.context.support-3.x.x.RELEASE.jar

applicationContext.xml中的代码如下:
<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>testmyname</value>
        </property>
        <property name="password">
            <value>xxxxxx</value>
        </property>
    </bean>


TestJavaMailSend.java代码如下:
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

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

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;

public class TestJavaMailSend {

	public static void main(String[] args) throws MessagingException {
		ApplicationContext ctx = new FileSystemXmlApplicationContext("src-resources/applicationContext.xml");
        JavaMailSender sender = (JavaMailSender) ctx.getBean("mailSender");
        TestJavaMailSend javaMailSend = new TestJavaMailSend();
        
        //测试发送只有文本信息的简单测试
        javaMailSend.sendTextMail(sender);
        
        //测试发送HTML内容的邮件
        javaMailSend.sendHtmlMail(sender);
        
        //测试发送带附件的邮件
        javaMailSend.sendMimeMessage(sender);
	}
	
	/**
     * 测试发送只有文本信息的简单测试
     * @param sender 邮件发送器
     * @throws Exception
     */
    private void sendTextMail(JavaMailSender sender) {
        SimpleMailMessage mail = new SimpleMailMessage();
        mail.setTo("testmy@sina.com");
        mail.setFrom("testmy@126.com");
        mail.setSubject("我是中文邮件主题!");
        mail.setText("spring Mail的简单!@#$%$%^%&^^%&*()\":|}OIYUDS~~<>?\":DFGSDSD测试");
        sender.send(mail);
        
        System.out.println("成功发送文本邮件!");
    }
    
    /**
     * 测试发送HTML内容的邮件
     * @param sender 邮件发送器
     * @throws MessagingException 
     * @throws Exception
     */
    private void sendHtmlMail(JavaMailSender sender) throws MessagingException {
    	MimeMessage msg = sender.createMimeMessage();  
        MimeMessageHelper message = new MimeMessageHelper(msg, true, "UTF-8");
        
        message.setFrom("testmy@126.com");  
        message.setSubject("我是中文HTML邮件主题");  
        message.setTo("testmy@sina.com");  //这个地方传入数组可以发送给多人
        //message.setCc("testmycc@sina.com");  //抄送地址,传入数组也可以抄送多人
        String htmlContent = "<html><head><title>htmlttt</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /></head><body><table border=\"1\"><tr><td>第一列</td><td>第二列</td></tr><tr><td colspan=\"2\"><img src=\"cid:shihuantp\"></td></tr></table></body></html>";
        message.setText(htmlContent, true);  //如果发的不是html内容去掉true参数
        
        // add the image (图片会嵌入到邮件里显示出来)
        FileSystemResource image = new FileSystemResource(new File("H:/我的像册/摇大旗.JPG"));
        message.addInline("shihuantp", image);   //这里的shihuantp一定要跟<img src=\"cid:shihuantp\">中cid后面的值一样
        
        sender.send(msg);
        
        System.out.println("成功发送Html邮件!");
    }
    
    /**
     * 发送带附件的邮件
     * @param sender 邮件发送器 
     * @throws Exception
     */
    private void sendMimeMessage(final JavaMailSender sender) {
        //附件文件集合
        final List files = new ArrayList();
        MimeMessagePreparator mimeMail = new MimeMessagePreparator() {
            public void prepare(MimeMessage mimeMessage) throws MessagingException, UnsupportedEncodingException {
                mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("testmy@sina.com"));
                mimeMessage.setFrom(new InternetAddress("testmy@126.com"));
                mimeMessage.setSubject("Spring发送带附件的邮件-修改了附件编码", "UTF-8"); 
                
                Multipart mp = new MimeMultipart();
                
                //向Multipart添加正文
                MimeBodyPart content = new MimeBodyPart();
                content.setText("内含spring邮件发送的例子,请查收!");
                
                //向MimeMessage添加(Multipart代表正文)
                mp.addBodyPart(content);
                files.add("H:/myfiledirectpry/velocity-1.7.jar");
                files.add("H:/myfiledirectpry/commons-email-1.3.2-bin.zip");
                files.add("H:/myfiledirectpry/我的备忘录.xls");
                
                //向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(MimeUtility.encodeWord(fds.getName()));
                    mp.addBodyPart(attachFile);
                }
                
                files.clear();
                
                //向Multipart添加MimeMessage
                mimeMessage.setContent(mp);
                mimeMessage.setSentDate(new Date());
            }
        };

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

}


上面的TestJavaMailSend.java是笔者做测试用的,下面笔者对测试的代码进行了封装:
package com.shihuan.core.common.mail;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;

public class SendEmail {
	
	protected static Logger logger = LoggerFactory.getLogger(SendEmail.class);

	/**
     * 功能: 发送只有文本信息的简单测试
     * @param request HttpServletRequest对象
     * @param fromSender 发送方地址  (例如: testshihuan@126.com)
     * @param toDestination 接收方地址  (例如: testshihuan@sina.com)
     * @param emailSubject 邮件主题
     * @param emailContent 邮件正文   (例如: "你好!I am Student!")
     */
    public static void sendTextMail(HttpServletRequest request, String fromSender, String toDestination, String emailSubject, String emailContent) {
    	ApplicationContext ctx = (ApplicationContext) request.getSession().getServletContext().getAttribute("ac");
        JavaMailSender sender = (JavaMailSender) ctx.getBean("mailSender");
    	
        SimpleMailMessage mail = new SimpleMailMessage();
        mail.setFrom(fromSender);
        mail.setTo(toDestination);
        mail.setSubject(emailSubject);
        mail.setText(emailContent);
        sender.send(mail);
        
        logger.info("成功发送文本邮件!");
    }
    
    /**
     * 功能: 发送HTML内容的邮件
     * @param request HttpServletRequest对象
     * @param fromSender 发送方地址  (例如: testshihuan@126.com)
     * @param toDestination 接收方地址  (例如: testshihuan@sina.com)
     * @param emailSubject 邮件主题
     * @param emailContent 邮件正文   (例如: "<html><head><title>htmlttt</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /></head><body><table border=\"1\"><tr><td>第一列</td><td>第二列</td></tr><tr><td colspan=\"2\"><img src=\"cid:shihuantp\"></td></tr></table></body></html>")
     * @param imageMap 在邮件中预显示的图片  (例如: map.put("shihuantp", "E:/我的像册/摇大旗.JPG"); map.put("mtytp", "E:/我的像册/海豚馆.JPG");)
     * @throws MessagingException
     */
    public static void sendHtmlMail(HttpServletRequest request, String fromSender, String toDestination, String emailSubject, String emailContent, Map<String, String> imageMap) throws MessagingException {
    	ApplicationContext ctx = (ApplicationContext) request.getSession().getServletContext().getAttribute("ac");
        JavaMailSender sender = (JavaMailSender) ctx.getBean("mailSender");
    	
    	MimeMessage msg = sender.createMimeMessage();  
        MimeMessageHelper message = new MimeMessageHelper(msg, true, "UTF-8");
        
        message.setFrom(fromSender);  
        message.setTo(toDestination);
        message.setSubject(emailSubject);
//        String htmlContent = "<html><head><title>htmlttt</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /></head><body><table border=\"1\"><tr><td>第一列</td><td>第二列</td></tr><tr><td colspan=\"2\"><img src=\"cid:shihuantp\"></td></tr></table></body></html>";
        message.setText(emailContent, true);  //如果发的不是html内容去掉true参数
        
        // add the image (图片会嵌入到邮件里显示出来)
        //FileSystemResource image = new FileSystemResource(new File("E:/我的像册/摇大旗.JPG"));
        //message.addInline("shihuantp", image);   //这里的shihuantp一定要跟<img src=\"cid:shihuantp\">中cid后面的值一样
        
        FileSystemResource image = null;
        Iterator iter = imageMap.keySet().iterator();
        while (iter.hasNext()) {
			String key = (String)iter.next();
			String value = imageMap.get(key);
			image = new FileSystemResource(new File(value));
			message.addInline(key, image);
		}
        
        sender.send(msg);
        
        logger.info("成功发送Html邮件!");
    }
    
    /**
     * 功能: 发送带附件的邮件
     * @param request HttpServletRequest对象
     * @param fromSender 发送方地址  (例如: testshihuan@126.com)
     * @param toDestination 接收方地址  (例如: testshihuan@sina.com)
     * @param emailSubject 邮件主题
     * @param emailContent 邮件正文   (例如: "你好!I am Student!")
     * @param attachments 邮件附件的绝对路径  (例如: new String[]{"E:/myserver/velocity-1.7.jar", "E:/myserver/commons-email-1.3.2-bin.zip", "E:/myserver/我的备忘录.xls"})
     */
    public static void sendMimeMessage(HttpServletRequest request, final String fromSender, final String toDestination, final String emailSubject, final String emailContent, final String[] attachments) {
    	ApplicationContext ctx = (ApplicationContext) request.getSession().getServletContext().getAttribute("ac");
        JavaMailSender sender = (JavaMailSender) ctx.getBean("mailSender");
    	
        //附件文件集合
        final List files = new ArrayList();
        MimeMessagePreparator mimeMail = new MimeMessagePreparator() {
            public void prepare(MimeMessage mimeMessage) throws MessagingException, UnsupportedEncodingException {
            	mimeMessage.setFrom(new InternetAddress(fromSender));
                mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(toDestination));
                mimeMessage.setSubject(emailSubject, "UTF-8"); 
                
                Multipart mp = new MimeMultipart();
                
                //向Multipart添加正文
                MimeBodyPart content = new MimeBodyPart();
                content.setText(emailContent);
                
                //向MimeMessage添加(Multipart代表正文)
                mp.addBodyPart(content);
                for (int i = 0; i < attachments.length; i++) {
                	files.add(attachments[i]);
				}
                
                //向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(MimeUtility.encodeWord(fds.getName()));
                    mp.addBodyPart(attachFile);
                }
                
                files.clear();
                
                //向Multipart添加MimeMessage
                mimeMessage.setContent(mp);
                mimeMessage.setSentDate(new Date());
            }
        };

        //发送带附件的邮件
        sender.send(mimeMail);
        
        logger.info("成功发送带附件邮件!");
    }
	
}
分享到:
评论

相关推荐

    java发送电子邮件

    Java发送电子邮件是一个常见的任务,尤其在自动化通知、订阅服务或者数据传输等场景中。这个话题主要涉及JavaMail API和JavaBeans Activation Framework (JAF)。JavaMail API是用于处理电子邮件的Java库,而JAF则...

    JAVA+发送电子邮件源代码学习

    在Java编程语言中,发送电子邮件是一项常见的任务,尤其在自动化通知、系统消息传递或客户服务场景中。本资源提供了关于使用Java发送电子邮件的源代码学习资料,让我们深入探讨这个主题。 首先,我们需要理解...

    java发邮件 java发email

    Java发送电子邮件是一个常见的任务,尤其在自动化通知、报表发送或者用户验证等场景中。下面将详细解释如何使用Java来发送邮件,并提供相关的知识点。 首先,Java通过JavaMail API提供了发送邮件的功能。JavaMail ...

    JAVA+发送电子邮件源码整理

    在Java编程语言中,发送电子邮件是一项常见的任务,尤其在自动化通知、系统日志报告或用户交互等场景下。本文将详细介绍如何使用Java实现电子邮件的发送功能,并基于提供的资源进行源码整理。 首先,我们需要理解...

    Java发送outlook邮件

    在IT行业中,使用编程语言发送电子邮件是一项常见的任务,特别是在自动化脚本或系统集成中。Java作为广泛应用的编程语言,提供了多种方法来发送邮件,包括通过Outlook和Notes客户端。在这个场景下,我们将深入探讨...

    Java邮件发送.zip

    在这个主题中,我们将深入探讨如何使用Java来发送电子邮件,以及涉及到的关键技术点。 首先,Java中用于发送邮件的主要API是JavaMail API,它是一个开源库,提供了一组接口和类,允许开发者通过SMTP(简单邮件传输...

    java发送电子邮件代码

    在Java编程语言中,发送电子邮件是一项常见的任务,可以用于通知、数据传输或其他自动化流程。JavaMail API 是一个开源库,它提供了与邮件服务器交互的能力,实现了SMTP(简单邮件传输协议)、POP3(邮局协议)和...

    java实现邮件发送(三种发送方式都有)

    Java发送邮件是软件开发中常见的需求,特别是在自动化通知、用户验证和客户服务等方面。在这个主题下,我们将探讨三种Java实现邮件发送的方式,以及如何通过提供的代码和参考资料进行实践。 首先,让我们了解一下...

    java swing截图发送 电子邮件

    本篇文章将深入探讨如何在Java Swing应用中实现截图并将其通过电子邮件发送的功能。 首先,我们需要了解Java Swing的基本组件和事件处理。`Robot`类是Java AWT库的一部分,可以用来模拟用户的键盘和鼠标操作,包括...

    Java实现发送邮件.pdf

    要通过Java发送邮件,首先需要准备以下内容: 1. **邮箱账号**:本例中使用163邮箱作为发件方,需要拥有一个有效的163邮箱账号。 2. **授权码**:163邮箱默认关闭了第三方客户端的访问权限,需要手动开启并获取一个...

    用java发送电子邮件

    要用Java发送电子邮件,你需要引入以下两个JAR文件: - `javax.mail.jar`:包含JavaMail API的核心类。 - `javax.activation.jar`(或`activation.jar`):包含了数据处理和类型识别的类,是JavaMail API的必要...

    java发送电子邮件jar包和实例

    在你提到的“java发送电子邮件jar包和实例”中,很可能包含的是JavaMail API的jar文件以及两个示例代码,帮助开发者理解如何使用API来发送邮件。 JavaMail API主要由以下组件组成: 1. javax.mail-api.jar:这是...

    基于Java的邮件发送模板

    在Java开发中,发送邮件是一项常见的任务,尤其在企业级应用和服务中,它用于通知、确认订单、发送报告等。本篇文章将详细讲解如何利用Java实现邮件发送,并结合Apache的相关库来创建邮件发送模板,以提升效率和用户...

    java发送邮件功能

    Java发送邮件功能是Java开发中常见的一项任务,它允许开发者通过编程的方式实现电子邮件的发送,包括正文内容、附件以及抄送等高级功能。在Java中,我们主要利用JavaMail API来实现这一目标。 JavaMail API是一个...

    java发送邮件相关jar包

    Java发送邮件功能是Java开发中常见的一项任务,它允许开发者通过编程的方式向指定的电子邮箱地址发送信息。在Java中,我们通常会依赖一些特定的库或者jar包来实现这一功能。这里提到的两个jar包——`spring-context-...

    java定时生成execl并发送邮件

    接着,JavaMail API是Java标准库中的部分,用于处理电子邮件的发送。它支持SMTP、POP3等多种协议,可以实现发送文本、HTML甚至附件(如我们生成的Excel文件)的邮件。在配置好发件人、收件人、主题和正文后,通过...

    java实现发送邮件jar文件

    JavaMail 是一个开源库,它提供了在Java应用程序中发送和接收电子邮件的能力。这个"java实现发送邮件jar文件"是JavaMail的一个实现,封装了SMTP(简单邮件传输协议)和其他相关协议,使得开发者能够轻松地集成邮件...

    简单Java邮件发送 Java实现邮件发送

    首先,我们需要理解JavaMail API,这是一个Java平台上的邮件处理库,它提供了发送和接收电子邮件的能力。JavaMail API 包含了多个接口和类,如`Session`、`Message`、`MimeMessage`、`Transport`等,它们是实现邮件...

    JAVA后台自动发送邮件

    首先,我们需要了解SMTP(Simple Mail Transfer Protocol),它是互联网上用于发送电子邮件的标准协议。JavaMail API是Java平台上的一个开源库,它提供了与SMTP服务器通信的接口,使我们能够在Java程序中实现邮件的...

Global site tag (gtag.js) - Google Analytics