今天闲着无事 看了看用java发送邮件的相关知识

代码参考自<<精通Java Web整合开发(JSP+AJAX+Struts+Hibernate)>>(第2版)

不多说 先上图

所用jar包如下:

activation.jar

mail.jar

smartupload.jar

其中第一个jar包支持的是带附件的邮件

前台textMail.html代码如下

<html>
  <head>
    <title>发送文本型邮件</title>
    <meta http-equiv="content-type" content="text/html; charset=gb2312">
  </head>

  <body>
    <h2>发送文本型邮件</h2>
    <hr>
    <form name="form1" method="post" action="sendMail1.jsp">
    	SMTP服务器:<input type="text" id="SMTPHost" name="SMTPHost">如smtp.qq.com<br>
    	登录帐号:<input type="text" id="user" name="user">若为qq邮箱 只用写qq号即可 不用写@qq.com 其他邮箱服务器类似<br>
    	登录密码:<input type="password" id="password" name="password"><br>
    	<br>
    	发件人邮箱:<input type="text" id="from" name="from"><br>
    	收件人邮箱:<input type="text" id="to" name="to"><br>
    	邮件标题:<input type="text" id="subject" name="subject"><br>
    	邮件内容:<textarea id="content" name="content" rows="5" cols="40"></textarea><br>
		<br>
		<input type="submit" name="submit" value="发送"> 
		<input type="reset" name="reset" value="重填">
    </form>
  </body>
</html>

sendMail1.jsp代码如下

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ page import="test.SendTextMail"%>

<jsp:useBean id="mySend" class="test.SendTextMail"></jsp:useBean>
<jsp:setProperty name="mySend" property="*"/>

<%
	//注意这里我们通过JavaBean的自省机制完成了对其属性的赋值

	boolean status = mySend.send();
	if (status){
		out.println("恭喜您,邮件发送成功!");
	}else{
		out.println("对不起,邮件发送失败!");
	}
%>

这里面调用的SendTextMail 代码如下

package test;

import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import java.util.*;

public class SendTextMail {

	String SMTPHost=""; //SMTP服务器
	String user=""; //登录SMTP服务器的帐号
	String password=""; //登录SMTP服务器的密码

	String from =""; //发件人邮箱
	String to =""; //收件人邮箱
	String subject =""; //邮件标题
	String content =""; //邮件内容	

	//无参数构造方法
	public SendTextMail() {}

	//发送邮件
	public boolean send(){
		//创建一个属性对象
		Properties props = new Properties();
		//指定SMTP服务器
		props.put("mail.smtp.host", SMTPHost);
		//指定是否需要SMTP验证
		props.put("mail.smtp.auth", "true");
		try{
			//创建一个授权验证对象
			SmtpAuth auth = new SmtpAuth();
			auth.setAccount(user,password);

			//创建一个Session对象
			Session mailSession = Session.getDefaultInstance(props,auth);
			mailSession.setDebug(true);

			//创建一个Message对象
			Message message=new MimeMessage(mailSession);

			//指定发件人邮箱
			message.setFrom(new InternetAddress(from));
			//指定收件人邮箱
			message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
			//指定邮件主题
			message.setSubject(subject);
			//指定邮件内容
			message.setText(content);
			//指定邮件发送日期
			message.setSentDate(new Date());
			//指定邮件优先级 1:紧急 3:普通 5:缓慢
			message.setHeader("X-Priority","1");
			message.saveChanges();

			//创建一个Transport对象
			Transport transport = mailSession.getTransport("smtp");
			//连接SMTP服务器
			transport.connect(SMTPHost, user, password);
			//发送邮件
			transport.sendMessage(message, message.getAllRecipients());
			transport.close();
			return true;
		}catch(Exception ex){
			ex.printStackTrace();
			return false;
		}
	}

	//定义一个SMTP授权验证类
	static class SmtpAuth extends Authenticator{
		String user,password;
		//设置帐号信息
		void setAccount(String user,String password){
			this.user = user;
			this.password = password;
		}
		//取得PasswordAuthentication对象
		protected PasswordAuthentication getPasswordAuthentication(){
			return new PasswordAuthentication(user,password);
		}
	}
	public void setContent(String content) {
		try{
			//解决内容的中文问题
			content = new String(content.getBytes("ISO8859-1"),"gb2312");
		}catch(Exception ex){
			ex.printStackTrace();
		}
		this.content = content;
	}

	public void setSubject(String subject) {
		try{
			//解决标题的中文问题
			subject = new String(subject.getBytes("ISO8859-1"),"gb2312");
		}catch(Exception ex){
			ex.printStackTrace();
		}
		this.subject = subject;
	}
	//省略部分getset方法
}

注意 要开启发送方邮箱服务器的pop/smtp服务

(在qq邮箱中 设置如下 邮箱设置--账户)

至于带附件的邮件如何发送 大家可参考

<<精通Java Web整合开发(JSP+AJAX+Struts+Hibernate)>>(第2版)

源码下载地址:

http://download.csdn.net/detail/dlf123321/7882929

聊聊javaMail的更多相关文章

  1. ActiveMQ安装配置及实例

    本文可作为吴水成老师,dubbo课程第21节的学习笔记. ActiveMQ的介绍及功能 参考百度 ActiveMQ的下载 https://activemq.apache.org/activemq-51 ...

  2. 聊聊Unity项目管理的那些事:Git-flow和Unity

    0x00 前言 目前所在的团队实行敏捷开发已经有了一段时间了.敏捷开发中重要的一个话题便是如何对项目进行恰当的版本管理.项目从最初使用svn到之后的Git One Track策略再到现在的GitFlo ...

  3. Mono为何能跨平台?聊聊CIL(MSIL)

    前言: 其实小匹夫在U3D的开发中一直对U3D的跨平台能力很好奇.到底是什么原理使得U3D可以跨平台呢?后来发现了Mono的作用,并进一步了解到了CIL的存在.所以,作为一个对Unity3D跨平台能力 ...

  4. javaMail

    JavaMail概述:        JavaMail是由Sun定义的一套收发电子邮件的API,不同的厂商可以提供自己的实现类.但它并没有包含在JDK中,而是作为JavaEE的一部分. javaMai ...

  5. JavaMail发送邮件

    发送邮件包含的内容有: from字段  --用于指明发件人 to字段      --用于指明收件人 subject字段  --用于说明邮件主题 cc字段     -- 抄送,将邮件发送给收件人的同时抄 ...

  6. fir.im Weekly - 聊聊 Google 开发者大会

    中国互联网的三大错觉:索尼倒闭,诺基亚崛起,谷歌重返中国.12月8日,2016 Google 开发者大会正式发布了Google Developers 中国网站 ,包含了Android Develope ...

  7. 聊聊asp.net中Web Api的使用

    扯淡 随着app应用的崛起,后端服务开发的也越来越多,除了很多优秀的nodejs框架之外,微软当然也会在这个方面提供更便捷的开发方式.这是微软一贯的作风,如果从开发的便捷性来说的话微软是当之无愧的老大 ...

  8. 应用层之E-mail服务及javaMail邮件发送的知识总结

    关于Email服务你需要知道的知识点: 概述: 今天来介绍一下应用层的电子邮件服务,我们每天几乎都在用,电子邮件(email)服务也是一种基于C/S模式的服务,它采用的是一种"存储-转发&q ...

  9. 没有神话,聊聊decimal的“障眼法”

    0x00 前言 在上一篇文章<妥协与取舍,解构C#中的小数运算>的留言区域有很多朋友都不约而同的说道了C#中的decimal类型.事实上之前的那篇文章的立意主要在于聊聊使用二进制的计算机是 ...

随机推荐

  1. 加解密、PKI与CA基础

    介绍 这门知识如果以前尝过的各位想必都知道:枯燥无比!因此在文中我会尽量讲的生动些,举一些例子,并试图以一个完整的例子来贯穿整个讲述过程.今年又恰逢莎翁逝世400周年,一方面也为了纪念这位伟大的作家. ...

  2. Zookeeper 客户端API调用示例(基本使用,增删改查znode数据,监听znode,其它案例,其它网络参考资料)

    9.1 基本使用 org.apache.zookeeper.Zookeeper是客户端入口主类,负责建立与server的会话 它提供以下几类主要方法  : 功能 描述 create 在本地目录树中创建 ...

  3. Redis之(五)持久化

    Redis提供了两种持久化的方式: (1)RDB(Redis DataBase)模式,就是在不同的时间点,将Redis存储的数据生成快照并存储到磁盘等介质上: (2)AOF(Append Only F ...

  4. 2017京东校招面试回忆(已成功拿到offer)

    一面 24日 晚上5:30-6:40 1 先说自己熟悉的领域 2 list的实现有什么?   arraylist1.6 1.7区别  底层   linkedlist 底层是怎么实现的 单向还是双向   ...

  5. Dynamics CRM2013 6.1.1.1143版本插件注册器的一个bug

    最近在做的项目客户用的是CRM2013sp1版本,所以插件注册器使用的也是与之对应的6.1.1.1143,悲剧的事情也因此而开始. 在插件中注册step时,工具里有个run in user's con ...

  6. Android fragment(片段)构建灵活的UI

    在以支持多种屏幕尺寸为目标设计应用时,您可以在不同的布局配置中重复使用您的fragment 从而根据可用的屏幕空间优化用户体验. 例如,在手机设备上,由于采用单窗格用户界面,因此可能更适合一次只显示一 ...

  7. [Vim]新建python文件自动添加python header

    使用vim脚本来实现的,使用了模板,几行代码就能实现很实用. ~/.vimrc 中的代码 "auto add pyhton header --start autocmd BufNewFile ...

  8. PhysicsJoint

    1 PhysicsJoint的使用 T09Join.h #ifndef__T09Joint_H__ #define__T09Joint_H__ #include"T32.h" cl ...

  9. 5.Qt自定义Button按钮的实现

     1.编写自定义按钮 MyButton.h #ifndef MYBUTTON_H #define MYBUTTON_H #include <QWidget> /** * @brief ...

  10. FFmpeg源代码简单分析:libavdevice的avdevice_register_all()

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...