`
wangping1213
  • 浏览: 2969 次
  • 性别: Icon_minigender_1
  • 来自: 诸暨
文章分类
社区版块
存档分类
最新评论

使用Java的JavaMail进行简单邮件发送

阅读更多
   据我自己实验的结果,邮件服务器使用smtp.163.com和smtp.yeah.net都可以,但是我直接使用smtp.qq.com和smtp.sina.com貌似都不行,不过收件地址qq和sina都可以用,大家要是需要测试的话,不妨去网易注册一个新用户,直接就可以用了,我刚新注册了一个163邮箱,可用。

   经过网上查询并经过本人测试,sina和qq需要先在邮箱中开启pop3/smtp服务才能够发邮件,具体办法为进入邮箱:“设置”->“开启”pop3/smtp服务。

   在使用测试本程序是需要两个jar包,mail.jar和activation.jar,可以在网搜索也可在本文末尾直接下载。
  
   本程序能够实现发送邮件并添加附件的功能。


import java.io.Serializable;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
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.MimeMultipart;

/**
 * 实现一个java发送邮件的对象
 * @author wangping1213
 *
 */
public class Mail implements Serializable {

	private static final long serialVersionUID = -3079057603211605487L;

	/**
	 * MIME邮件对象
	 */
	private MimeMessage mimeMsg;
	
	/**
	 * 邮件会话对象
	 */
	private Session session;
	
	/**
	 * 系统属性
	 */
	private Properties props;
	
	/**
	 * smtp是否需要认证
	 */
	private boolean needAuth = false; 
	
	/**
	 * smtp认证的用户名
	 */
	private String username = "";
	
	/**
	 * smtp认证的密码
	 */
	private String password = "";
	
	/**
	 * Multipart(抽象类)对象,
	 * 保存电子邮件内容的容器是Multipart抽象类,
	 * 它定义了增加和删除及获得电子邮件不同部分内容的方法.
	 */
	private Multipart mp;
	
	/**
	 * 在构造Mail对象时的初始化工作
	 * @param smtp
	 */
	public Mail(String smtp) {
		//设置SMTP主机(SMTP服务器)
		setSmtpHost(smtp);
		
		//创建一个邮件对象
		createMimeMessage();
	}
	
	/**
	 * 设置SMTP主机
	 * @param hostName
	 */
	public void setSmtpHost(String hostName) {
		System.out.println("设置系统属性:mail.stmp.host=" + hostName);
		if (null == props) {
			
			//获得系统属性对象
			props = System.getProperties();		
			
			//设置SMTP主机
			props.put("mail.smtp.host", hostName);
			
			
		} //end if
	}//end setSmtpHost
	
	/**
	 * 创建MIME邮件对象
	 */
	public boolean createMimeMessage() {
		try {
			System.out.println("准备获取邮件会话对象!");
			
			//获取邮件会话对象,需要一个授权抽象类的实现类
			session = Session.getDefaultInstance(props, new Authenticator() {
				//重写这个方法,这是授权类内部的要求
				public PasswordAuthentication getPasswordAuthentication() {
					return new PasswordAuthentication(username, password);
				}
			});
		} catch (Exception e) {
			System.err.println("获取邮件会话对象时发生错误!" + e);
			return false;
		}//end try-catch
		
		System.out.println("准备创建MIME邮件对象");
		
		try {
			//创建MIME邮件对象
			mimeMsg = new MimeMessage(session);
			//创建一个multipart对象
			mp = new MimeMultipart();
			return true;
		} catch (Exception e) {
			System.err.println("创建MIME邮件对象失败!" + e);
			return false;
		} //end try-catch
		
		
	} //end createMimeMessage()
	
	/**
	 * 设置是否需要smtp身份认证
	 * @param need 是否需要身份认证
	 */
	public void setNeedAuth(boolean needAuth) {
		
		System.out.println("设置smtp身份认证:mail.smtp.auth = " + needAuth);
		
		if (null == props) {	//判断是否已经取得系统属性对象
			//取得系统属性对象
			props = System.getProperties();
		}// end if 
		
		//是否需要认证
		this.needAuth = needAuth;
		
		//设置是否需要认证
		props.put("mail.smtp.auth", "" + this.needAuth);
		
		
	}// end setNeedAuth()
	
	/**
	 * 设置用户名和密码
	 * @param name 用户名
	 * @param pass 密码
	 */
	public void setNamePass(String name, String pass) {
		
		System.out.println("程序得到用户名和密码");
		
		//设置用户名和密码
		username = name;
		password = pass;
		
	}// end setNamePass
	
	/**
	 * 设置邮件主题
	 * @param mailSubject
	 * @return
	 */
	public boolean setSubject(String mailSubject) {
		
		System.out.println("设置邮件主题!");
		
		try {
			//将邮件主题添加到邮件对象中
			mimeMsg.setSubject(mailSubject);
			return true;
		} catch (MessagingException e) {
			System.err.println("设置邮件主题错误!");
			return false;
		}//end try-catch
		
	}//end setSubject()
	
	/**
	 * 设置邮件体格式
	 * @param mailBody 邮件体
	 * @return 是否设置成功
	 */
	public boolean setBody(String mailBody) {
		
		System.out.println("设置邮件体格式!");
		
		//邮件体对象
		BodyPart bp = new MimeBodyPart();
		
		try {
			//设置邮件体内容和格式
			bp.setContent("<meta http-equiv='Content-Type' content='text/html;charset=utf-8'/>"
					+ mailBody, "text/html;charset=utf-8");
			
			//在multipart对象中添加邮件体对象
			mp.addBodyPart(bp);
			return true;
		} catch (MessagingException e) {
			System.err.println("设置邮件正文时发生错误!" + e);
			return false;
		}// end try-catch
		
	}// end setBody()
	
	/**
	 * 增加邮件附件
	 * @param filename 附件名称
	 * @return 是否添加成功
	 */
	public boolean addFileAffix(String filename) {
		
		System.out.println("添加邮件附件!");
		
		//邮件体对象
		BodyPart bp = new MimeBodyPart();
		
		//邮件附件源对象
		FileDataSource fields = new FileDataSource(filename);
		
		try {
			//在邮件体对象中添加事件
			bp.setDataHandler(new DataHandler(fields));
			
			//在邮件体对象中设置附件名
			bp.setFileName(fields.getName());
			
			//在multipart对象中添加邮件体对象
			mp.addBodyPart(bp);
			
			return true;
		} catch (MessagingException e) {
			System.err.println("增加邮件附件" + filename + "发生错误! " + e);
			return false;
		}// end try-catch
		
	}// end addFileAffix()
	
	/**
	 * 设置发信人
	 * @param from 发信人
	 * @return 设置发信人是否成功
	 */
	public boolean setFrom(String from) {
		
		System.out.println("设置发信人!");
		
		try {
			//在邮件对象设置发信人
			mimeMsg.setFrom(new InternetAddress(from));
			return true;
		} catch (Exception e) {
			System.err.println("设置发信人出错!" + e);
			return false;
		}// end try-catch
		
	}// end setFrom()
	
	/**
	 * 设置收信人
	 * @param to 收信人
	 * @return 设置收信人是否成功
	 */
	public boolean setTo(String to) {
		
		System.out.println("设置收信人!");
		
		try {
			//在邮件对象中设置收信人
			mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
			return true;
		} catch (Exception e) {
			System.err.println("设置收信人!" + e);
			return false;
		}// end try-catch
		
	}// end setTo()
	
	/**
	 * 发送附件到
	 * @param copyTo 发送附件的地址
	 * @return 发送附件是否成功
	 */
	public boolean setCopyTo(String copyTo) {
		
		System.out.println("发送附件到");
		
		if (null == copyTo) {
			return false;
		}//end if
		
		try {
			//在邮件对象中设置发送附件地址
			mimeMsg.setRecipients(Message.RecipientType.CC, 
					(Address[]) InternetAddress.parse(copyTo));
			return true;
		} catch (Exception e) {
			System.err.println("发送附件失败!" + e);
			return false;
		}// end try-catch
		
	}// end setCopyTo()
	
	/**
	 * 发送邮件
	 * @return 发送邮件是否成功
	 */
	public boolean sendout() {
		
		try {
			//邮件对象中设置multipart对象(内容体)
			mimeMsg.setContent(mp);
			
			//邮件对象保存更新
			mimeMsg.saveChanges();
			
			System.out.println("正在发送邮件...");
			
			session.setDebug(true);
			
			//发送信息类,使用Session类的getTransport方法,并使用smtp协议
			Transport transport = session.getTransport("smtp");
			
			//连接服务器,使用用户名,密码
			transport.connect(props.getProperty("mail.smtp.host"), username, password);
			
			//设置邮件对象
			transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));
			
			System.out.println("发送邮件成功!");
			
			//关闭传输对象
			transport.close();
			
			return true;
		} catch (MessagingException e) {
			System.err.println("邮件发送失败!" + e);
			return false;
		}// end try-catch
		
	}// end sendout()
	
	/**
	 * main方法
	 * @param args 参数
	 */
	public static void main(String[] args) {
		
		//实体内容
		String mailBody = "<font color='red'>欢迎光临</font><a href='www.baidu.com'>我的邮件测试</a>";
		
		//邮件实体
		Mail theMail = new Mail("smtp.163.com");
		
		//设置验证
		theMail.setNeedAuth(true);
		
		//设置主题
		if (theMail.setSubject("邮件测试") == false) {
			return;
		}// end if
		
		//邮件内容,支持html如<font color='red'>欢迎光临</font><a href='#'>邮件测试</a>
		if (theMail.setBody(mailBody) == false) {
			return;
		}// end if
		
		//设置发件人
		if (theMail.setFrom("发件人@163.com") == false) {
			return;
		}// end if
		
		//设置收件人
		if (theMail.setTo("收件人@qq.com") == false) {
			return;
		}// end if
		
		//添加附件
		if (theMail.addFileAffix("附件的地址") == false) {
			return;
		}// end if
		
		//设置发件人的用户名和密码
		theMail.setNamePass("发件人用户名", "发件人密码");	
		
		//发送邮件
		if (theMail.sendout() == false) {
			return;
		}// end if
		
	}// end main()
	
}//end class Mail
分享到:
评论

相关推荐

    使用JAVAMail代发邮件

    使用 JavaMail 库可以轻松地在 Java 应用程序中发送电子邮件。JavaMail 是一个 Java API,用于在 Java 应用程序中发送和接收电子邮件。它提供了一个抽象层,允许开发者使用不同的电子邮件协议,例如 SMTP、POP3 和 ...

    java使用javaMail发送邮件

    JavaMail API 是一套标准的Java接口,用于处理SMTP(简单邮件传输协议)、POP3(邮局协议)和IMAP(因特网消息访问协议)等邮件服务。它不仅支持文本邮件,还支持HTML邮件、附件、多部分消息以及S/MIME和PGP安全...

    使用javaMail发邮件及收取邮箱未读邮件并标记为已读

    最后,使用 `Transport.send()` 方法将邮件发送出去。 接收邮件时,我们通常使用 IMAP 协议,因为它支持离线模式,并且可以管理邮箱中的邮件状态,比如未读或已读。创建 `Store` 对象后,通过 `getStore("imap")` ...

    javamail 回执邮件资料

    JavaMail 是一个开源的 Java 库,用于处理电子邮件的发送和接收。它提供了与 SMTP、POP3 和 IMAP 协议交互的接口,是开发基于 Java 的电子邮件应用的基础。回执邮件是邮件服务中的一项功能,它允许发件人在发送邮件...

    JavaMail(JAVA邮件服务器)API详解 chm.rar

    使用JavaMail API的内容会涵盖实际的代码示例,比如如何创建和发送简单的文本邮件、带有附件的邮件,以及如何接收和读取邮件。这部分还会涉及到认证机制,如如何设置用户名和密码进行SMTP身份验证,以及SSL/TLS安全...

    javaMail发送邮件 发送成功 收不到邮件 或收到邮件无主题无收件人乱码

    在使用JavaMail进行邮件发送的过程中,可能会遇到以下几种常见问题:发送成功但收件方未收到邮件、邮件收到后无主题或无收件人信息以及邮件内容出现乱码等情况。本文将详细探讨这些问题的原因及相应的解决方案。 ##...

    Javamail 简单邮件发送

    本文将深入探讨如何使用JavaMail进行简单邮件发送,以及其支持的配置和附件功能。 首先,发送邮件的基本流程涉及到以下几个步骤: 1. **配置邮件会话**:JavaMail API中的`Properties`类用于存储邮件服务器的相关...

    基于JavaMail的Java邮件发送-附源码

    通过以上步骤,你就可以使用JavaMail API在Java应用程序中发送邮件了。提供的源码应该包含了完整的实现,你可以根据自己的需求进行修改和调试。记得在实际应用中,为了安全起见,应避免在代码中硬编码敏感信息,如...

    java javamail 邮件发送

    在`test.java`文件中,你可以看到这些步骤的实现,通过运行该文件进行邮件发送的测试。请注意,为了安全起见,实际应用中不应硬编码敏感信息如用户名和密码,而应使用环境变量或配置文件。 总的来说,JavaMail提供...

    JavaMail发送邮件(文本、html、附件)

    JavaMail是一种广泛使用的Java库,用于在应用程序中发送电子邮件。这个标题"JavaMail发送邮件(文本、html、附件)"涵盖了使用JavaMail API发送不同格式邮件的核心功能。下面将详细介绍如何利用JavaMail发送文本、...

    javaMail 发邮件

    JavaMail 是一个强大的开源库,专门用于在Java应用程序中发送和接收电子邮件。它提供了丰富的API,使得开发者可以方便地处理SMTP、POP3...通过熟练掌握JavaMail的API和使用方法,可以轻松地在Java应用中集成邮件功能。

    JavaMail javamail java电子邮件客户端

    使用`Transport.send(Message)`方法可完成邮件发送。 4. **Address**: 用于表示邮件地址,包括发件人(`From`)、收件人(`To`)、抄送人(`Cc`)和密送人(`Bcc`)。`InternetAddress`类是处理这些地址的工具。 5...

    JavaMail 具备垃圾邮件过滤功能的邮箱

    这涉及到JavaMail API的使用,如`Session`对象用于配置邮件服务器连接参数,`Message`对象代表一封邮件,`Transport`类则负责实际的邮件发送操作。收邮件时,会通过`Store`对象连接到邮件服务器,获取`Folder`并读取...

    javamail 收发电子邮件

    JavaMail 是一个强大的开源库,专门用于在Java应用程序中实现电子邮件的发送和接收。它支持多种邮件协议,如SMTP(简单邮件传输协议)用于发送邮件,IMAP(因特网消息访问协议)和POP3(邮局协议)用于接收邮件。在...

    JavaMail收发Gmail邮件

    JavaMail API是Java平台中的一个标准扩展库,用于发送、接收以及管理电子邮件。它提供了丰富的接口来实现邮件的各种操作,如构建复杂的MIME消息、处理附件等。 #### 二、使用JavaMail收发Gmail邮件 在使用JavaMail...

    JavaMail(JAVA邮件服务) API详解

    JavaMail API是Java平台上用于处理电子邮件的一套强大的库,它为开发者提供了丰富的功能,使得在应用程序中发送和接收邮件变得简单。本文将深入探讨JavaMail API的各个方面,帮助你理解和掌握这一关键工具。 首先,...

    关于用javamail发送邮件时,由于邮件服务器要SSL,解决办法

    在使用JavaMail进行邮件发送时,如果邮件服务器配置了SSL/TLS,我们需要在代码中启用相应的安全设置。 在`SendMail.java`中,我们需要设置以下关键参数: 1. `Properties props`:这是一个属性对象,用来存储连接...

    JavaMail实现邮件发送的简单封装(包括文本、图片、html、附件)

    在本文中,我们将深入探讨如何使用JavaMail来实现这些功能,并通过一个名为"mail4j"的简单封装示例来展示其实现过程。 首先,我们需要引入JavaMail相关的依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: ...

    java javamail 发送邮件 源代码 例子

    Java/javamail发送邮件是Java...总的来说,这些文件覆盖了Java Web开发的多个主题,包括邮件发送、Ajax、MVC模式、数据对象、Excel操作以及客户端脚本语言JavaScript。学习这些内容有助于提升你的Java全栈开发能力。

    使用JavaMail实现发送邮件

    不过,需要注意的是,使用JavaMail发送邮件时,必须确保你的SMTP服务器允许第三方应用程序进行授权,并且可能需要开启“不够安全的应用”的权限(对于Gmail而言)。 在提供的压缩包文件`Mail`中,可能包含了一些...

Global site tag (gtag.js) - Google Analytics