java实现邮件发送功能

一个简单的小例子实现邮件发送

以下图:html


输入要发送的邮件地址以及发送的邮件内容,点击按钮,发送邮件,完成便可跳到以下页面:前端


项目结构

如图:

详细代码介绍

1.按照项目结构创建项目并新建文件

2.导入发送邮件所须要的jar包

3.index.jsp页面部分代码以下:

<body>
  	<form action="${pageContext.request.contextPath}/sendEmail" method="post">
  		请输入要发送的邮件地址:<input type="text" name="emailAddress"><br />
  		请输入要发送的邮件内容:<input type="text" name="emailMsg"><br />
		<input type="submit" value="点击发送邮件" />
  	</form>
  </body>

4.SendEmailServlet.java

package com.zrx.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.zrx.util.SendEmailUtil;

public class SendEmailServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// 前端form表单post请求--防止请求提交乱码.
		request.setCharacterEncoding("utf-8");
		
		// 获取前端传入的参数
		String emailAddress = request.getParameter("emailAddress");
		String emailMsg = request.getParameter("emailMsg");
		try {
			
			// 邮件发送处理
			SendEmailUtil.sendMail(emailAddress, emailMsg);
			
			// 将发送信息保存到session中
			request.getSession().setAttribute("send_msg", "邮件发送成功!");
			
			// 页面跳转到发送结果页面
			request.getRequestDispatcher("/send_result.jsp").forward(request, response);
		} catch (Exception e) {
			e.printStackTrace();
			request.getSession().setAttribute("send_msg", "邮件发送失败!");
			request.getRequestDispatcher("/send_result.jsp").forward(request, response);
		}
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

5.SendEmailUtil.java

package com.zrx.util;

import java.util.Properties;

import javax.mail.Address;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SendEmailUtil {
	
	public static boolean sendMail(String emailAddress, String emailMsg) {
		
		// 谁发送
		String from = "";
		
		// 发给谁
		String to = emailAddress;
		
		// 发送者的用户名和密码(邮箱登陆用)
		final String username = ""; // 此处填写发送的邮箱名
		final String password = ""; // 此处填写登陆的邮箱密码

		// 定义properties对象,设置环境信息
		Properties properties = new Properties();
		
		/*
		 * mail.smtp.host :指定链接的邮件服务器的主机名。如:163邮箱就填写smtp.163.com 
		 * 若在本地测试的话,须要在本地安装smtp服务器
		 */
		properties.setProperty("mail.smtp.host", "smtp.163.com");
		
		// mail.smtp.auth:指定客户端是否要向邮件服务器提交验证
		properties.setProperty("mail.smtp.auth", "true");
		
		/*
		 * mail.transport.protocol:指定邮件发送协议:smtp。smtp:发邮件;pop3:收邮件
		 * mail.store.protocol:指定邮件接收协议
		 */
		properties.setProperty("mail.transport.protocol", "smtp");
		
		// 获取session对象
		Session session = Session.getInstance(properties);
		
		// 当设置为true,JavaMail AP就会将其运行过程和邮件服务器的交互命令信息输出到console中,用于JavaMail的调试
		session.setDebug(true);
		try {
			
			// 建立邮件对象
			MimeMessage message = new MimeMessage(session);
			
			// 设置邮件发送方
			message.setFrom(new InternetAddress(from));
			
			// 设置邮件发送的主题<邮件标题>
			message.setSubject("邮件发送设置");
			
			// 设置邮件发送的内容
			message.setContent(emailMsg,"text/html;charset=utf-8");
			Transport transport=session.getTransport();
			
			// 链接邮件服务器,“”中填写邮件服务器主机名
			transport.connect("",25, username, password);
			transport.sendMessage(message,new Address[]{new InternetAddress(to)});
			transport.close();
			return true;
		} catch (MessagingException e) {
			e.printStackTrace();
			return false;
		}
	}
	
}

6.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <!-- 配置servlet -->
  <servlet>
    <servlet-name>SendEmailServlet</servlet-name>
    <servlet-class>com.zrx.servlet.SendEmailServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>SendEmailServlet</servlet-name>
    <url-pattern>/sendEmail</url-pattern>
  </servlet-mapping>
  	
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>


7..出现的错误解决

当时运行的时候个人代码出现这样的错误:Domain contains control or whitespace in string (域名包含控制或空白字符串),个人java文件是以utf-8格式保存的,当文件格式改成ASCII的格式的时候,邮箱地址最后就出现了不少?,把?删掉并从新保存为utf-8格式。从新运行就能够了。