`
jiangyaning8
  • 浏览: 18424 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java发送邮件可带附件

 
阅读更多
强大的Java发送邮件案例,支持添加本地附件或网络附件,支持同时添加多个附件,网页引用,图片引用等。
还提供有Java发送邮件所需的javamail.jar包和activation.jar包下载。

所需jar包(javamail.jar和activation.jar共366K)

 

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
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;

public class MailSend {
	
	/**
	 * 更强大的发送邮件案例
	 * 发件方式枚举
	 * @author lanxj
	 */
	public enum SendTypeEnum{
		TO(0,"发件方式 - 普通发送"),CS(1,"发件方式 - 抄送"),MCS(2,"发件方式 - 密件抄送");
		private int type;
		private String description;
		SendTypeEnum(int type,String desc){
			this.type=type;
			this.description=desc;
		}
		public int intValue(){
			return this.type;
		}
		public String getDescription(){
			return this.description;
		}
	}

	/** 邮件相关信息 - SMTP 服务器 */
	private String smtpHost = null;
	/** 邮件相关信息 - 邮件用户名 */
	private String username = null;
	/** 邮件相关信息 - 密码 */
	private String password = null;
	/** 邮件相关信息 - 发件人邮件地址 */
	private String fromAddress = null;
	/** 邮件相关信息 - 邮件主题 */
	private String subject = "";
	/** 邮件相关信息 - 邮件发送地址 */
	private Address[] toAddress = null;
	/** 邮件相关信息 - 邮件抄送地址 */
	private Address[] csAddress = null;
	/** 邮件相关信息 - 邮件密件抄送地址 */
	private Address[] mcsAddress = null;
	/** 邮件相关信息 - 邮件正文(复合结构) */
	private MimeMultipart context = null;

	public MailSend() {
		context = new MimeMultipart();
	}

	/**
	 * 设置 SMTP 服务器
	 * @param strSMTPHost 邮件服务器名称或 IP
	 * @param strUser 邮件用户名
	 * @param strPassword 密码
	 */
	public void setSMTP(String strSMTPHost, String strUser,
			String strPassword) {
		this.smtpHost = strSMTPHost;
		this.username = strUser;
		this.password = strPassword;
	}

	/**
	 * 设置邮件发送地址
	 * @param strFromAddress 邮件发送地址
	 */
	public void setFromAddress(String strFromAddress) {
		this.fromAddress = strFromAddress;
	}

	/**
	 * 设置邮件目的地址
	 * @param strAddress 邮件目的地址列表, 不同的地址可用;号分隔
	 * @param iAddressType 邮件发送方式 (SendTypeEnum.TO 0, SendTypeEnum.CS 1, SendTypeEnum.MCS 2) 枚举已在本类定义
	 * @throws AddressException
	 */
	public void setAddress(String strAddress, SendTypeEnum iAddressType) throws AddressException {
		if (iAddressType==SendTypeEnum.TO) {
			ArrayList alAddress = splitStr(strAddress, ';');
			toAddress = new Address[alAddress.size()];
			for (int i = 0; i < alAddress.size(); i++) {
				toAddress[i] = new InternetAddress( (String) alAddress.get(i));
			}
		}else if (iAddressType==SendTypeEnum.CS) {
			ArrayList alAddress = splitStr(strAddress, ';');
			csAddress = new Address[alAddress.size()];
			for (int i = 0; i < alAddress.size(); i++) {
				csAddress[i] = new InternetAddress( (String) alAddress.get(i));
			}
		}else if (iAddressType==SendTypeEnum.MCS) {
			ArrayList alAddress = splitStr(strAddress, ';');
			mcsAddress = new Address[alAddress.size()];
			for (int i = 0; i < alAddress.size(); i++) {
				mcsAddress[i] = new InternetAddress( (String) alAddress.get(i));
			}
		}
	}

	/**
	 * 设置邮件主题
	 * @param strSubject 邮件主题
	 */
	public void setSubject(String strSubject) {
		this.subject = strSubject;
	}

	/**
	 * 设置邮件文本正文
	 * @param strTextBody 邮件文本正文
	 * @throws MessagingException
	 */
	public void setContext(String strTextBody) throws MessagingException {
		MimeBodyPart mimebodypart = new MimeBodyPart();
		mimebodypart.setText(strTextBody, "GBK");
		context.addBodyPart(mimebodypart);
	}

	/**
	 * 设置邮件超文本正文
	 * @param strHtmlBody 邮件超文本正文
	 * @throws MessagingException
	 */
	public void setHtmlContext(String strHtmlBody) throws MessagingException {
		MimeBodyPart mimebodypart = new MimeBodyPart();
		mimebodypart.setDataHandler(new DataHandler(strHtmlBody, "text/html;charset=GBK"));
		context.addBodyPart(mimebodypart);
	}

	/**
	 * 设置邮件正文外部链接 URL, 信体中将包含链接所指向的内容
	 * @param strURLAttachment 邮件正文外部链接 URL
	 * @throws MessagingException
	 * @throws MalformedURLException
	 */
	public void setURLAttachment(String strURLAttachment) throws
	MessagingException, MalformedURLException {
		MimeBodyPart mimebodypart = new MimeBodyPart();
		mimebodypart.setDataHandler(new DataHandler(new URL(strURLAttachment)));
		context.addBodyPart(mimebodypart);
	}

	/**
	 * 设置邮件附件
	 * @param strFileAttachment 文件的全路径
	 * @throws MessagingException
	 * @throws UnsupportedEncodingException
	 */
	public void setFileAttachment(String strFileAttachment) throws MessagingException, UnsupportedEncodingException {
		File path = new File(strFileAttachment);
		if (!path.exists() || path.isDirectory()) {
			return;
		}
		String strFileName = path.getName();
		MimeBodyPart mimebodypart = new MimeBodyPart();
		mimebodypart.setDataHandler(new DataHandler(new FileDataSource(
				strFileAttachment)));
		// modified by zord @ 2003/6/16 to support Chinese File Name
		// mimebodypart.setFileName(strFileName);
		mimebodypart.setFileName(MimeUtility.encodeText(strFileName));
		// end of modify
		context.addBodyPart(mimebodypart);
	}

	/**
	 * 主方法:邮件发送(一次发送多个地址, 优点速度快, 但是有非法邮件地址时将中断发送操作)
	 * 前提条件{
	 * 		setSMTP();【必选】
	 * 		setFromAddress();【必选】
	 * 		setAddress();【必选】
	 * 		setSubject();【必选】
	 * 		set*Context();【必选】
	 * 		set*Attachment();【可选】
	 * }
	 * @throws MessagingException
	 */
	@SuppressWarnings("static-access")
	public void sendBatch() throws MessagingException {
		Properties properties = new Properties();
		properties.put("mail.smtp.host", this.smtpHost);
		properties.put("mail.smtp.auth", "true");//必须
		Session session = Session.getInstance(properties, new Authenticator(){
			protected javax.mail.PasswordAuthentication getPasswordAuthentication(){//这个很重要,当今mail服务器大多都是通过认证才能发信的
				 return new javax.mail.PasswordAuthentication(MailSend.this.username, MailSend.this.password);
			}
		});
		MimeMessage mimemessage = new MimeMessage(session);
		mimemessage.setFrom(new InternetAddress(this.fromAddress));
		if (toAddress != null) {
			mimemessage.addRecipients(javax.mail.Message.RecipientType.TO, this.toAddress);
		}
		if (csAddress != null) {
			mimemessage.addRecipients(javax.mail.Message.RecipientType.CC, this.csAddress);
		}
		if (mcsAddress != null) {
			mimemessage.addRecipients(javax.mail.Message.RecipientType.BCC, this.mcsAddress);
		}
		mimemessage.setSubject(this.subject);
		mimemessage.setContent(this.context);
		mimemessage.setSentDate(new Date());
		
		/*发送方式一
		Transport transport = session.getTransport("smtp");
		transport.connect(this.smtpHost, this.username, this.password);
		transport.send(mimemessage);
		*/
		//发送方式二
		Transport.send(mimemessage);
		
		System.out.println("已向下列邮箱发送了邮件");
		showAddress(toAddress,csAddress,mcsAddress);
	}
	
	/**
	 * 显示所有的收件人地址信息
	 * @param addresses
	 */
	private static void showAddress(Address[] ... addresses){
		if (addresses != null) {
			for (int i = 0; i < addresses.length; i++) {
				if(addresses[i]!=null){
					for (int j = 0; j < addresses[i].length; j++) {
						System.out.println(addresses[i][j]);
					}
				}
			}
		}
	}
	
	/**
	 * 将字符串分割成字符串集合
	 * @param str 字符串
	 * @param sp 分隔符
	 * @return
	 */
	private static ArrayList splitStr(String str,char sp){
		ArrayList retu=new ArrayList();
		String []res=str.split(""+sp);
		for (String s : res) {
			retu.add(s);
		}
		return retu;
	}

	
	public static void main(String[] args) {
		try {
			MailSend mail=new MailSend();
			mail.setFromAddress("lanxj@sh-stt.com");
			mail.setSMTP("smtp.163.com","nanjifengchen@163.com","password");
			
			mail.setAddress("nanjifengchen@163.com;songhaikang@163.com",SendTypeEnum.TO);
//			mail.setAddress("lanxj@sh-stt.com", SendTypeEnum.CS);
//			mail.setAddress("694626525@qq.com", SendTypeEnum.MCS);
			mail.setSubject("邮件发送测试");//标题
//			mail.setContext("如有打扰,请见谅,谢谢!");//内容
//			mail.setHtmlContext("如有打扰请见谅
,谢谢!");//支持html
			try{
				mail.setFileAttachment("D:\temp\tnsnames_sh.ora");//本地附件
				mail.setURLAttachment("http://static.tieba.baidu.com/tb/img/2010120801.jpg");//网络文件
//				mail.setURLAttachment("http://static.tieba.baidu.com/tb/editor/images/jd/j_0017.gif");
				mail.setURLAttachment("http://tieba.baidu.com");//引用网页
			}catch (Exception e) {
				System.out.println("附件发送异常");
			}
			mail.sendBatch();
		} catch (AddressException e) {
			e.printStackTrace();
		} catch (MessagingException e) {
			e.printStackTrace();
		}
	}

}

分享到:
评论

相关推荐

    java 发送邮件 可带附件

    本教程将详细解释如何使用Java发送带有附件的邮件,基于提供的"mailDemo"源码进行解析。 首先,我们需要引入JavaMail API,这是一个用于处理邮件的开源库。在你的`pom.xml`(如果你使用的是Maven)或`build.gradle`...

    java 邮件发送 可带附件

    Java邮件发送功能是Java开发中常见的一项...通过以上步骤和代码,你可以实现使用Java发送带有附件的邮件。不过,实际开发中,你可能还需要考虑其他因素,如使用模板引擎生成邮件内容、批量发送邮件、错误重试策略等。

    javaemail发送邮件(带附件)

    "javaemail发送邮件(带附件)" javaemail发送邮件(带附件)是使用Java技术实现的邮件发送功能,支持带附件的发送。下面是该功能的知识点总结: 1. 使用JavaMailSenderImpl类来发送邮件,需要设置SMTP服务器、用户名...

    java 发送邮件(带附件)

    java 发送邮件(带附件) 所有源码 里边 有jar包 有程序 解决: 1.发送邮件问题 2.发送图片问题 3.发送附件问题 4.发送html格式问题 哇 这东西 只要下载就直接可以运行.伙伴们赶紧微观吧.

    java 发邮件带excel附件,以流的形式发送附件,不生成excel文件

    现在,我们有了Excel数据的字节数组,可以将其作为邮件附件添加: ```java import javax.mail.util.ByteArrayDataSource; import javax.activation.DataSource; // 创建DataSource对象 DataSource dataSource = ...

    带附件发邮件java

    带邮件发送邮件java实现简单简约适合新手

    java发邮件 带附件 多媒体邮件

    根据提供的文件信息,本文将详细解释如何使用Java发送带有附件及多媒体内容(如图片)的电子邮件。本示例代码及说明适用于希望利用Java Mail API发送包含丰富格式内容邮件的开发者。 ### Java 发送带有附件及多媒体...

    java Exchange收发邮件加附件

    以下是一个简单的发送邮件带附件的Java代码示例: ```java ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1); ExchangeCredentials credentials = new WebCredentials(...

    Java实现发送邮件(带附件)功能

    Java代码实现发送邮件功能,支持发送带有附件的。需要直接拿走

    java 发送附件mail

    总结一下,Java发送带有附件的邮件涉及到JavaMail API的使用,包括配置SMTP服务器、创建邮件对象、添加内容和附件,以及发送邮件等步骤。理解这些步骤和相关类的作用是实现此功能的关键。在处理不同类型的邮件时,...

    利用Java发送邮件(含附件)的例子

    总结一下,Java发送带附件的邮件涉及到的主要知识点有: - 配置文件的读取与解析。 - JavaMail API的使用,包括`Session`、`MimeMessage`、`Multipart`、`MimeBodyPart`等类。 - SMTP协议的使用,包括身份验证和邮件...

    java发邮件 java发email

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

    Java发送邮件_单附件_多附件_加抄送多人 _2个示例zip

    这个"Java发送邮件_单附件_多附件_加抄送多人 _2个示例zip"的资源包含两个核心类:EmailManager.java和AnnexMailService.java,它们提供了一个强大的邮件发送功能,支持单个或多个附件,以及添加抄送人。下面将详细...

    Java实现发送邮件内容+附件

    以上就是使用Java实现发送带有内容和附件的邮件的基本过程。在实际项目中,你可能需要根据具体需求进行更复杂的定制,例如处理HTML格式的正文、添加抄送和密送收件人、设置邮件头信息等。在提供的压缩包文件“发送...

    java实现发送邮件(普通邮件和带附件)功能

    这个项目提供了完整的代码示例,演示了如何在Java程序中实现发送普通邮件以及带有附件的功能。以下是对这些功能的详细解释: 首先,发送普通邮件涉及到的主要接口是`javax.mail.Session`、`javax.mail.Transport`和...

    java邮件发送(含附件发送)源码

    Java邮件发送技术是Java开发中一个实用且常见的功能,它允许开发者通过编程方式发送电子邮件,包括文本、HTML格式的正文以及附件。在本教程中,我们将深入探讨如何使用JavaMail API来实现邮件发送,特别是含附件的...

    java生成excle邮件附件发送

    java生成excle文件不需要导出直接通过邮件附件发送java生成excle文件不需要导出直接通过邮件附件发送java生成excle文件不需要导出直接通过邮件附件发送java生成excle文件不需要导出直接通过邮件附件发送

    发送邮件及邮件附件java代码实例(支持多附件,群发送).pdf

    【Java 发送邮件及邮件附件】 在Java编程中,发送邮件及附加文件是一项常见的任务,这通常涉及到SMTP(Simple Mail Transfer Protocol)协议。这里我们分析的`Mail.java`类提供了一个实现此功能的示例,它使用了...

    JavaMail(3)——发送带附件的邮件.docx

    在JavaMail中,发送带有附件的邮件涉及到对MIME(Multipurpose Internet Mail Extensions)标准的理解和使用。MIME扩展了邮件协议,允许在邮件中包含多媒体内容,如图片、文档、音频或视频文件等。 在JavaMail中,`...

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

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

Global site tag (gtag.js) - Google Analytics