1. 程式人生 > >web開發 開發一個能傳送郵件的應用

web開發 開發一個能傳送郵件的應用

開發一個能傳送郵件的應用,前人種的樹,借鑑 參考大牛的程式碼,做的小應用。

大概是這樣的:


其中SMTP密碼,並非使用者名稱所對應的登入密碼,而是在開啟


163信箱這個服務時,自己設定的授權碼,按步驟即可輕鬆開啟這個服務,並獲得授權碼,其中,本次實驗的主要是163信箱,host地址也是163信箱,剛開始一直設定的smtp.qq.com,但是一直報錯,又有流傳說qq郵箱的話問題比較大一點,所以用的網易163郵箱。

試驗了一下,發現能用,併成功的傳送了郵件。



    好的,開始進入正題:

首先是準備階段,需要備好4個jar包,activation,log4j-1.2.15,commons-email-1.3,還有一個mail包,如果你找不到資源,請訪問

這裡,如果連結失效,樓主是好人,大膽的留下郵箱,我給你發資源,只要不怕我在郵件數量哪裡稍微寫得大一點,不過貌似大一點的話,會被接收郵件者自動收入到垃圾站,而且由於這裡用的是163信箱,儘管可以向qq郵箱傳送郵件,但是會有點小問題,先不說問題,可以確保郵件一定能收到。把所述的四個jar包拷貝到WEB-INF目錄下的lib資料夾,並bulid path,如圖:


如果想建立的不是web專案,而是java專案,則只需右鍵建立的java專案名,新建一個叫lib的資料夾,並把jar包拷貝進去即可。

先寫一個meil類:

package cim.it.object;

import java.io.Serializable;
//host name sender receiver username password subject message
public class Meil implements Serializable {
	public static final String ENCODEING="UTF-8";//編碼方式
	private String host;//埠
	private String name;//使用者名稱
	private String sender;//傳送者
	private String receiver;//接受者
	private String username;//賬號名
	private String password;//密碼
	private String subject;//表題
	private String message;//內容
	public String getHost() {
		return host;
	}
	public void setHost(String host) {
		this.host = host;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSender() {
		return sender;
	}
	public void setSender(String sender) {
		this.sender = sender;
	}
	public String getReceiver() {
		return receiver;
	}
	public void setReceiver(String receiver) {
		this.receiver = receiver;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getSubject() {
		return subject;
	}
	public void setSubject(String subject) {
		this.subject = subject;
	}
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
}
什麼?你說我mail拼成了meil...

然後寫一個MeilUtil類,這個類比較重要,裡邊是如何傳送的郵件:

package cim.it.object;
import javax.enterprise.inject.spi.Bean;
import org.apache.*;
import org.apache.commons.mail.HtmlEmail;
import org.apache.log4j.Logger;
@SuppressWarnings("unused")
public class MeilUtil {
	protected final Logger logger=Logger.getLogger(getClass());
	public  boolean send(Meil meil)
	{
		HtmlEmail email= new HtmlEmail();
		try
		{
			email.setHostName(meil.getHost());
			email.setCharset(meil.ENCODEING);
			email.addTo(meil.getReceiver());
			email.setFrom(meil.getSender(), meil.getName());
			email.setAuthentication(meil.getUsername(), meil.getPassword());
			email.setSubject(meil.getSubject());
			email.setMsg(meil.getMessage());
			email.send();//傳送郵件
			if(logger.isDebugEnabled())
			{
				logger.debug(meil.getSender()+"傳送郵件到"+meil.getReceiver());
			}
			return true;
		}
		catch(Exception e)
		{
			e.printStackTrace();logger.info(meil.getSender()+"傳送郵件到"+meil.getReceiver()+"失敗");
			return false;
		}
	}

}


如果,建立的 是java專案,只需要寫一個main方法跑一下就行了:
package cim.it.object;

import java.util.Scanner;

public class send {
	public static void  main(String args[])
	{
		Scanner cin=new Scanner(System.in);
		Meil mail=new Meil();//實體化meil類
		mail.setHost("smtp.163.com");//網易163信箱的埠,別的郵箱不是這個
		mail.setSender("[email protected]");//傳送者郵箱
		mail.setReceiver("[email protected]");//接受者郵箱
		mail.setUsername("[email protected]");//使用者名稱
		mail.setPassword("*************");//填自己的操作碼
		mail.setSubject("2016-8-2 10:21:06");
		String message=cin.next();
		System.out.println(message);//自行輸入郵件內容
		//mail.setMessage("hehehe");
		mail.setMessage(message);
		//for(int i=0;i<1;i++)//不要壞壞的打這個for迴圈的主意
		//{
			new MeilUtil().send(mail);//傳送
			System.out.println("sueecess!");
		//}
		
	}

}

如果中間遇到了這個問題,如圖:

要麼是pop3,SMTP服務沒有開,要麼就是傳送者郵箱填的不是163信箱。

如果傳送成功後依然會有兩行警告:


需要在src中建立一個檔案(不是資料夾)檔名為  log4j.properties   ,內容為:

# Configure logging for testing: optionally with log file
log4j.rootLogger=WARN, stdout
# log4j.rootLogger=WARN, stdout, logfile

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n


如果建立的是web專案,則需要寫一個servlet:

package cim.it.object;

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;

public class sendmessage extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		try
		{
			request.setCharacterEncoding("utf-8");
			response.setContentType("text/html;charset=utf-8");
			Meil mail=new Meil();
			mail.setHost("smtp.163.com");
			String sender=request.getParameter("address");
			String receiver=request.getParameter("receiver");
			String username=request.getParameter("username");
			String password=request.getParameter("password");
			String subject=request.getParameter("subject");
			String message =request.getParameter("message");
			String num=request.getParameter("number");
			int Num=Integer.valueOf(num);
			mail.setSender(sender);//傳送者的郵箱
			mail.setReceiver(receiver);//接受物件
			mail.setUsername(username);//使用者名稱
			mail.setPassword(password);//不是信箱密碼,為設定POP3/SMTP/IMAP時,設定的 密碼
			mail.setSubject(subject);//郵件主題
			mail.setMessage(message);//郵件內容
			mail.setHost("smtp.163.com");//設定郵箱埠
			//MeilUtil meil=;
			for(int i=0;i<Num;i++)//傳送次數
			{
				new MeilUtil().send(mail);//傳送郵件
			}
			
			request.setAttribute("msg", "郵件傳送成功");
			request.getRequestDispatcher("/success.jsp").forward(request, response);//頁面跳轉
		}
		catch (Exception e)
		{
			
		}
//		request.setCharacterEncoding("utf-8");
//		response.setContentType("text/html;charset=utf-8");
//		Meil mail=new Meil();
//		mail.setHost("smtp.163.com");
//		String sender=request.getParameter("address");
//		String receiver=request.getParameter("receiver");
//		String username=request.getParameter("username");
//		String password=request.getParameter("password");
//		String subject=request.getParameter("subject");
//		String message =request.getParameter("message");
//		String num=request.getParameter("number");
//		int Num=Integer.valueOf(num);
//		mail.setSender(sender);//傳送者的郵箱
//		mail.setReceiver(receiver);//接受物件
//		mail.setUsername(username);//使用者名稱
//		mail.setPassword(password);//不是信箱密碼,為設定POP3/SMTP/IMAP時,設定的 密碼
//		mail.setSubject(subject);//郵件主題
//		mail.setMessage(message);//郵件內容
//		mail.setHost("smtp.163.com");//設定郵箱埠
//		//MeilUtil meil=;
//		for(int i=0;i<Num;i++)//傳送次數
//		{
//			new MeilUtil().send(mail);//傳送郵件
//		}
//		
//		request.setAttribute("msg", "郵件傳送成功");
//		request.getRequestDispatcher("/success.jsp").forward(request, response);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
然後寫一個幾秒後跳轉的success.jsp

:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>傳送成功</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body> 
  <!-- url後面的為目標地址--> 
<meta http-equiv="Refresh" content="5;url=use.jsp"> 
<center>
  <table> 
  <tr> 
          <td width="181" height="30" class="FontBlack">  該頁面</td> 
          <td width="22" align="center" class="FontBlack"><div id="time">5</div></td> 
          <td width="194" align="left" class="FontBlack">秒後自動跳轉</td> 
   </tr> 
</table> 
</center>
</body> 

<script language="JavaScript"> 
var times=6; 
clock(); 
function clock() 
{ 
window.setTimeout('clock()',1000); 
times=times-1; 
time.innerHTML =times; 
} 
</script>
</html>


其中跳轉到,也就是最開始的頁面,呼叫servlet那個頁面,use.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'use.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
   <body>
    <center>
    <div>
    <h1>歡迎使用</h1>
    <form action="servlet/sendmessage" method="post">
    <table>
    	<tr>
    	<td width="88" align="right"><font size="1">傳送者郵箱:</font></td><td colspan="2"><input type="text" name="address" value="${address }" style="width:200;height:25;"/></td>
    	</tr>
    	<tr>
    	<td width="88" align="right"><font size="1">接受者郵箱:</font></td><td colspan="2"><input type="text" name="receiver" value="${receiver }" style="width:200;height:25;"/></td>
    	</tr>
    	<tr>
    	<td width="88" align="right"><font size="1">使用者名稱:</font></td><td colspan="2"><input type="text" name="username" value="${username }" style="width:200;height:25;"/></td>
    	</tr>
    	<tr>
    	<td width="88" align="right"><font size="1">SMTP密碼:</font></td><td colspan="2"><input type="password" name="password" style="width:200;height:25;"/></td>
    	</tr>
    	<tr>
    	<td width="88" align="right"><font size="1">郵件主題:</font></td><td colspan="2"><input type="text" name="subject" value="${subject }" style="width:200;height:25;"/></td>
    	</tr>
    	<tr>
    	<td width="88" align="right"><font size="1">郵件內容:</font></td><td colspan="2"><input type="text" name="message" value="${message }" style="width:200;height:25;"/></td>
    	</tr>
    	<tr>
    	<td width="88" align="right"><font size="1">郵件數量:</font></td><td colspan="2"><input type="text" name="number" value="${number }" style="width:200;height:25;"/></td>
    	</tr>
    	
    	 <tr><td colspan="3" align="center"><input type="submit" value="傳送郵件" style="width:130;height:30;"/></td></tr> 
    </table>
    </form>
    <font color="red" size="2"> ${msg }</font>  
    </div>
    </center>
  </body>
</html>

這樣,就做成了所述應用,記得慎填郵件數量,否則會被自動轉到垃圾信箱的,上午寫好的。就在剛才qq一直提示這個:

我會告訴你這是因為早上給自己發了幾封郵件,並錯誤的填寫了郵件數量?

還有,開發這個中途會有好多異常和錯誤,百度查找了很久 ,如果在開發這個應用中遇到了難解決的異常,私信,評論均可,會熱心提供幫助。

強調一下,不要錯誤填寫使用郵件數量。


喏,錯誤使用的 後果。


相關推薦

web開發 開發一個傳送郵件應用

開發一個能傳送郵件的應用,前人種的樹,借鑑 參考大牛的程式碼,做的小應用。 大概是這樣的: 其中SMTP密碼,並非使用者名稱所對應的登入密碼,而是在開啟 163信箱這個服務時,自己設定的授權碼,按步驟即可輕鬆開啟這個服務,並獲得授權碼,其中,本次實驗的主要是163信箱,

【Java郵件開發】5.編寫一個JavaMail傳送郵件的程式

之前我們對JavaMail的API進行了簡單的介紹,並下載了相應的jar包。 這次,我們要著手使用JavaMail開發一個可以傳送郵件的程式。 1.建立工程 首先我們在Eclipse中新建一個名為JavaMailTest的工程: 然後我們新建一個lib資料夾,將mail

用java開發Email工具之傳送郵件

  作者:馮睿 本文介紹瞭如何利用Java的網路API來實現一個電子郵件工具程式。通常Email工具都是使用SMTP(簡單郵件傳輸協議, Simple Mail Transfer Protocol)來傳送郵件,使用POP3協議來接受電子郵件。在本文中只對這兩個協議作簡單介紹。

記錄一次不傳送郵件故障處理

伺服器使用的是萬網的vps,郵件伺服器是阿里雲郵箱。今天發現不能傳送郵件。 1:編寫測試程式碼,傳送過程中,發現出現服務超時。我沒有伺服器管理許可權,處理起來比較棘手。 2:經過百度搜索,發現阿里雲伺服器是禁止25埠傳送郵件的。 我們使用的是萬網vps,可能近期也封禁25 傳

linux中mail函式不傳送郵件怎麼辦呢?

沒有安裝或啟動 sendmail 元件 1.重新安裝 sendmail 元件 我用的是 CentOS ,使用下面的命令安裝 yum install sendmail 2.使用下面的命令重啟php-fpm程序 /etc/init.d/php-fpm restart 3.檢測se

[python3.6 flask web學習]使用Flask-Mail傳送郵件

首先進入虛擬環境安裝flask-mail擴充套件模組 pip install flask-mail 傳送郵件需要配置傳送郵件的伺服器。flask-mail固定的配置變數名如下 在macos或者linux作業系統中使用export命令匯入環境變數 export MAIL_

Java Web(十三) 使用javamail進行傳送郵件,(使用QQ,163,新浪郵箱伺服器)

    加油加油。                     --WH 一、傳送郵件的原理     在瞭解其原理之前,先要知道兩個協議,SMTP和POP3       SMTP:Simple Mail Transfer Protocol,即簡單郵件傳輸協議,傳送郵件的協議,

sendmail命令啟動很慢的解決方法及不傳送郵件

即一定要配置一個hostname 和 127.0.0.1 的對應對映 最近折騰VPS的在啟動sendmail遇到一個問題就是執行service sendmail start之後發現啟動很慢。 上圖基本就卡在這裡了。 sendmail的啟動原理我小菜肯定是看

一個C++ 傳送郵件的類

/*********************************************************************** *傳送郵件模組標頭檔案 *可以傳送文字和附件(支援多個附件一起傳送) **************************

使用Nginx+Lua(OpenResty)開發高性Web應用

class fig eve red rman 這一 普通 ets 詳情 在互聯網公司,Nginx可以說是標配組件,但是主要場景還是負載均衡、反向代理、代理緩存、限流等場景;而把Nginx作為一個Web容器使用的還不是那麽廣泛。Nginx的高性能是大家公認的,而Nginx開發

用Inferno代替React開發高性響應式WEB應用

直接 dom節點 parser 什麽是 生命周期 reac div 例子 出現 什麽是Inferno Inferno可以看做是React的另一個精簡、高性能實現。它的使用方式跟React基本相同,無論是JSX語法、組件的建立、組件的生命周期,還是與Redux或Mobx的配

iOS12系統應用開發傳送郵件

iOS12系統應用開發傳送郵件 訊息分享是應用社交化和營銷的重要途徑。除了開發者自己搭建專有的訊息分享渠道之外,還可以藉助系統自帶的各種途徑。iOS提供了3種快速分享訊息的方式,分別為傳送郵件、傳送簡訊以及資料分享等。本章將講解這三種方式。 傳送郵件 郵件是一種更為靈活的資料分享方式。它可以幫助使用者將

iOS12系統應用開發基礎教程傳送郵件

iOS12系統應用開發基礎教程傳送郵件 訊息分享是應用社交化和營銷的重要途徑。除了開發者自己搭建專有的訊息分享渠道之外,還可以藉助系統自帶的各種途徑。iOS提供了3種快速分享訊息的方式,分別為傳送郵件、傳送簡訊以及資料分享等。本章將講解這三種方式。 傳送郵件 郵件是一種更為靈活的資料分享

Spring boot 官網學習筆記 - 開發一個Spring boot web應用程式

Creating the POM <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:

web開發——4.一個完整的web專案和子應用程式的建立以及資料模型操作的兩種方法

一、建立一個完整的web專案 1.在pycharm命令列中輸入命令:     django-admin   startproject     myweb,即可建立一個新的web專案 新的web專案包

分享一個全開源的ASP.NET快速開發平臺,快速開發OA CRM ERP 等系統

web 更多 ora 支持 環境 get class don 搭建 bingo炸了 2017/3/30 16:28:14 閱讀(870) 評論(0) 公司業務量比較大,接了很多項目,為了縮短開發周期老板讓我牽頭搭建了一個快速開發平臺。 我們主要的業務是做OA

打通C/4HANA和S/4HANA的一個原型開發:智服務創新案例

信息 支付 abc 喜歡 ron 選擇 weave com 博客 今年6月SAP發布C/4HANA之後,有顧問朋友們在微信公眾號後臺留言,詢問C/4HANA如何同SAP的數字化核心S/4HANA系統結合起來,從而打通企業的前後端業務,幫助企業實現數字化轉型。 有的顧問朋友

基於Windows8與Visual Studio11開發一個USB驅動應用程式

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

web前端開發技術之淺談對HTML5 智表單的理解

提示 goods 表單 加載完成 空格 日期和時間 url 顯示 指向 Html5新增input的form屬性,用於指向特定form表單的id,實現input無需放在form標簽之中,即可通過表單進行提交。 <FORM id=xinzeng> … </FO

Node做後臺開發一個簡單且實用的應用(程式碼加部署)

下面通過一個微信小程式後端的程式碼,來介紹一下Node做後臺開發的一些思路。 這段程式碼的功能是:       建立一個Http埠服務,監聽來自9000埠的訊息,微信小程式是通過9000埠給該node後臺程式傳送post請求,node後臺程式接受完資料後,然後請求圖靈機器