`
mingjie115
  • 浏览: 11383 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

SMTP 邮件发送

    博客分类:
  • JAVA
阅读更多
SMTP方式邮件发送


/**
* 邮件发送 处理邮件发送过程中的一系列问题
* 明
* 2010-03-12
*/:
package com.ming.util.email;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.StringTokenizer;

import sun.misc.BASE64Encoder;
// 邮件发送
public class SmtpEmail {

// 用户名/密码加密
private BASE64Encoder encode = new BASE64Encoder();
// 套接字对象
private Socket socket;

public SmtpEmail() {}

/**
* 连接服务器
* @param emailMessage
*/
private void setSocket(EmailMessage emailMessage) {
try {
if(emailMessage.getServer() != null
&& !emailMessage.getServer().equals("")
&& emailMessage.getPort() != 0) {
this.socket = new Socket(emailMessage.getServer(),
emailMessage.getPort());
} else {
throw new NullPointerException("连接参数错误!");
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
System.out.println("服务器连接成功!");
}
}

/**
* 注册到服务器
* @param emailMessage
*/
private void registerServer(EmailMessage emailMessage) {
int result;
result = getResult(emailMessage);
// 判断是否连接
if(result != 220) {
try {
throw new IOException("服务器注册失败!");
} catch (IOException e) {
e.printStackTrace();
}
}
// 发送消息确认
sendMessage("helo " + emailMessage.getServer(), emailMessage);
}

/**
* 发送消息
* @param message
* @param emailMessage
* @return
*/
private int sendMessage(String message, EmailMessage emailMessage) {
try {
emailMessage.getWriter().write(message);
emailMessage.getWriter().newLine();
emailMessage.getWriter().flush();
} catch (IOException e) {
e.printStackTrace();
}
return getResult(emailMessage);
}

/**
* 用户登录连接
* @param emailMessage
*/
private void userLogin(EmailMessage emailMessage) {
int result;
result = sendMessage("auth login", emailMessage);
if(result != 334) {
try {
throw new IOException("用户验证失败!");
} catch (IOException e) {
e.printStackTrace();
}
}
result = sendMessage(encode.encode(emailMessage.getUserName().getBytes()),
emailMessage);
if(result != 334) {
try {
throw new IOException("用户名错误!");
} catch (IOException e) {
e.printStackTrace();
}
}
result = sendMessage(encode.encode(emailMessage.getPassword().getBytes()),
emailMessage);
if(result != 235) {
try {
throw new IOException("密码错误!");
} catch (IOException e) {
e.printStackTrace();
}
}
}

/**
* 发送收件人 发件人
* @param emailMessage
*/
private void setFromTo(EmailMessage emailMessage) {
int result;
result = sendMessage("mail from:<" + emailMessage.getFrom() + ">", emailMessage);
if(result != 250) {
try {
throw new IOException("发件人不存在!");
} catch (IOException e) {
e.printStackTrace();
}
}

result = sendMessage("rcpt to:<" + emailMessage.getTo() + ">", emailMessage);
if(result != 250) {
try {
throw new IOException("收件人不存在!");
} catch (IOException e) {
e.printStackTrace();
}
}
}

/**
* 发送邮件内容
* @param emailMessage
*/
private void setEmailContent(EmailMessage emailMessage) {
int result;
result = sendMessage("data", emailMessage);
if(result != 354) {
try {
throw new IOException("数据无法传送!");
} catch (IOException e) {
e.printStackTrace();
}
}
try {
emailMessage.getWriter().write("From: " + emailMessage.getFrom());
emailMessage.getWriter().newLine();
emailMessage.getWriter().write("To: " + emailMessage.getTo());
emailMessage.getWriter().newLine();
emailMessage.getWriter().write("Subject: " + emailMessage.getSubject());
emailMessage.getWriter().newLine();
emailMessage.getWriter().write("Content-Type: text/html");
emailMessage.getWriter().newLine();
emailMessage.getWriter().newLine();
emailMessage.getWriter().write(emailMessage.getContent());
emailMessage.getWriter().newLine();

result = sendMessage(".", emailMessage);
} catch (IOException e) {
e.printStackTrace();
}

if(result != 250) {
try {
throw new IOException("邮件发送失败!");
} catch (IOException e) {
e.printStackTrace();
}
}
}

/**
* 退出
* @param emailMessage
*/
private void quit(EmailMessage emailMessage) {
int result;
result = sendMessage("quit", emailMessage);
if(result != 221) {
try {
throw new IOException("退出失败!");
} catch (IOException e) {
e.printStackTrace();
}
}
}

/**
* 读取服务器返回消息状态
* @param emailMessage
* @return
*/
private int getResult(EmailMessage emailMessage) {
int result;
String readLine = "";
try {
// 读取服务器返回消息
readLine = emailMessage.getReader().readLine();
} catch (IOException e) {
e.printStackTrace();
}
// 读取服务器返回消息状态码 转换为整数
StringTokenizer tokenizer = new StringTokenizer(readLine, " ");
result = Integer.parseInt(tokenizer.nextToken());
// 返回
return result;
}

/**
* 邮件发送
* @param emailMessage
*/
public void sendEmail(EmailMessage emailMessage){
setSocket(emailMessage);
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream()));
emailMessage.setReader(reader);
emailMessage.setWriter(writer);
registerServer(emailMessage);
userLogin(emailMessage);
setFromTo(emailMessage);
setEmailContent(emailMessage);
quit(emailMessage);
} catch (IOException e) {
e.printStackTrace();
} finally {
System.out.println("邮件发送成功!\n请查收!");
}
}
}
实体类1:
package com.ming.util.email;

import java.io.BufferedReader;
import java.io.BufferedWriter;

/**
* 邮件实体 相关邮件消息
* 明
* 2010-03-12
*/
public class EmailMessage {

// 发件人
private String from;
// 收件人
private String to;
// 用户名
private String userName;
// 密码
private String password;
// 标题
private String subject;
// 内容
private String content;
// 服务器
private String server;
// 端口
private int port;
// 读取流
private BufferedReader reader;
// 写入流
private BufferedWriter writer;

public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
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 getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getServer() {
return server;
}
public void setServer(String server) {
this.server = server;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public BufferedReader getReader() {
return reader;
}
public void setReader(BufferedReader reader) {
this.reader = reader;
}
public BufferedWriter getWriter() {
return writer;
}
public void setWriter(BufferedWriter writer) {
this.writer = writer;
}

}
暂只实现普通邮件内容发送,尚未对附件进行处理

另:附有源码,
希望各位多多指教!
0
2
分享到:
评论

相关推荐

    Java Socket 实现SMTP邮件发送,支持SSL/TSL

    7. **异常处理**:在实现SMTP邮件发送时,要处理各种可能的网络和协议错误,如连接失败、认证错误、超时等。这通常通过捕获和处理`IOException`、`AuthenticationFailedException`等异常来实现。 8. **关闭资源**:...

    Smtp 邮件发送_源代码(10W/10小时)

    1. `s.bat`:这可能是一个批处理文件,用于自动化执行SMTP邮件发送的任务,可能包含了运行SMTP发送程序的命令。 2. `listen.cpp`:这是一个C++源代码文件,很可能包含了一个监听器类或者函数,用于接收和处理发送...

    易语言SMTP邮件发送

    易语言SMTP邮件发送是一种在编程中利用SMTP(Simple Mail Transfer Protocol)协议实现电子邮件发送的方法,主要应用于易语言编程环境中。SMTP是互联网上用于传输电子邮件的标准协议,它允许用户通过一个服务器将...

    VC SMTP邮件发送程序

    【VC SMTP邮件发送程序】是基于Visual Studio 2008环境开发的一个应用程序,它能够帮助用户通过SMTP(Simple Mail Transfer Protocol)协议发送电子邮件。SMTP是互联网上传输电子邮件的标准协议,使得用户可以从一个...

    smtp 邮件发送客户端

    在本项目中,我们将探讨如何利用MFC(Microsoft Foundation Classes)库中的Socket功能来实现一个SMTP邮件发送客户端。 MFC是微软为Windows应用程序开发提供的C++类库,它封装了许多Windows API,使得开发者可以更...

    易语言源码易语言SMTP邮件发送源码.rar

    这篇"易语言源码易语言SMTP邮件发送源码"提供了在易语言环境下实现SMTP邮件发送的代码示例。通过学习这个源码,开发者可以了解到如何在易语言中搭建邮件发送系统,包括设置发件人、收件人、主题、邮件正文以及附件等...

    SMTP 邮件发送模块(源码)

    在实际应用中,开发者可以利用这个SMTP邮件发送模块,通过提供适当的参数(如发件人邮箱、收件人邮箱、邮件内容等),就能实现程序自动发送邮件的功能。通过深入理解和学习源码,不仅可以了解SMTP邮件发送的原理,还...

    smtp邮件发送程序

    总的来说,SMTP邮件发送程序的学习能够帮助我们掌握互联网上的邮件通信机制,通过编程实现自动化邮件发送功能,这对于日常办公、系统通知、自动化任务等方面都有着广泛的应用。通过实践和研究提供的资源,你将能够更...

    SMTP邮件发送.rar

    在本文中,我们将深入探讨SMTP邮件发送的工作原理、如何使用易语言实现SMTP邮件发送以及相关的编程细节。 1. SMTP工作流程: SMTP的工作流程通常涉及三个主要角色:发件人、收件人和SMTP服务器。当用户通过电子邮件...

    易语言SMTP邮件发送源码

    易语言SMTP邮件发送源码是基于易语言编程环境开发的一种用于发送电子邮件的程序代码。SMTP(Simple Mail Transfer Protocol)是互联网上用于传输电子邮件的标准协议。易语言,由中国程序员王银辉开发,是一种以中文...

    易语言SMTP邮件发送源码.rar

    在本压缩包“易语言SMTP邮件发送源码.rar”中,包含的是使用易语言实现SMTP(Simple Mail Transfer Protocol)邮件发送功能的源代码。SMTP是互联网上传输电子邮件的标准协议,它允许程序将邮件发送到指定的邮件...

    基于SMTP邮件发送客户端

    首先,SMTP邮件发送客户端的基本工作原理是用户通过客户端输入邮件信息,包括发件人、收件人、主题和邮件内容。客户端会使用SMTP协议将这些信息转换为特定格式的数据包,并通过TCP/IP网络连接到SMTP服务器。SMTP...

    C# socket smtp 邮件发送(支持SSL)

    在C#中,我们可以通过System.Net.Mail命名空间下的SmtpClient类来实现SMTP邮件发送。然而,为了实现socket级别的控制,我们可以直接使用System.Net.Sockets命名空间的TcpClient和NetworkStream类,这样可以更好地...

    SMTP邮件发送程序

    描述中提到的`CSmtp.cpp`文件很可能是SMTP邮件发送功能的实现,其中可能包含连接到SMTP服务器、设置发件人和收件人、发送邮件内容和附件的函数。使用C++编写这样的程序时,需要理解TCP套接字编程和SMTP协议的命令...

    smtp 邮件发送系统 源码

    C#是一种广泛使用的面向对象的编程语言,它提供了丰富的库支持开发SMTP邮件发送功能。POP3(Post Office Protocol version 3)则是另一种协议,主要用于接收邮件。 在SMTP邮件发送系统中,主要涉及以下几个核心知识...

    PHP SMTP 邮件发送类

    `PHP SMTP 邮件发送类` 提供了这样的功能,使得开发者可以便捷地在PHP应用中集成邮件发送服务。这里我们将详细探讨如何使用此类以及相关的知识点。 首先,`class.phpmailer.php` 和 `class.smtp.php` 是PHPMailer库...

    c# SMTP邮件发送程序,如不好用,我撞墙!

    自己从网上查找了很多资料,修改其中的很多Bug,才写成的SMTP邮件发送类, 虽然简单,但绝对实用! 用于实际的项目工程, 程序自身已经经过完全测试,100%通过 功能包括: 1. 收件人,抄送,密送; 多个收件人 2. ...

    Smtp 邮件发送_源代码

    下面将详细讲解SMTP邮件发送的相关知识点,以及可能与提供的文件列表相关的源代码分析。 首先,SMTP邮件发送过程通常包括以下几个步骤: 1. **连接建立**:发送方邮件客户端(或应用程序)连接到SMTP服务器,通常...

Global site tag (gtag.js) - Google Analytics