package com.socket.test;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
/**
* 通过socket向smtp协议服务器发送邮件
* @author fuyanqing
*
*/
public class SocketMail {
String mailServer;
String from;
String to;
String content;
String lineFeet = "\r\n";
private int port = 25;
Socket client;
BufferedReader in;
DataOutputStream os;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getMailServer() {
return mailServer;
}
public void setMailServer(String mailServer) {
this.mailServer = mailServer;
}
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;
}
/**
* 初始化连接
* @return
*/
private boolean init(){
boolean boo = true;
if(mailServer==null || "".equals(mailServer)){
return false;
}
try {
client = new Socket(mailServer,port);
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
os = new DataOutputStream(client.getOutputStream());
String isConnect = response();
if(isConnect.startsWith("220")){
}else{
System.out.println("建立连接失败:"+isConnect);
boo = false;
}
} catch (UnknownHostException e) {
System.out.println("建立连接失败!");
e.printStackTrace();
boo = false;
} catch (IOException e) {
System.out.println("读取流失败!");
e.printStackTrace();
boo = false;
}
return boo;
}
/**
* 发送smtp指令
* 并返回服务器响应信息
*/
private String sendCommand(String msg){
String result = null;
try {
os.writeBytes(msg);
os.flush();
result = response();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* 读取服务器端响应信息
* @return
*/
private String response(){
String result = null;
try {
result = in.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* 关闭
*/
private void close(){
try {
os.close();
in.close();
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 发送邮件
* @return
*/
public boolean sendMail(){
//初始化
if(client==null){
if(init()){
}else{
return false;
}
}
//判断from,to
if(from==null || from.isEmpty() || to == null || to.isEmpty()){
return false;
}
//进行握手
String result = sendCommand("HELO "+mailServer+lineFeet);
if(isStartWith(result,"250")){
}else{
System.out.println("握手失败:"+result);
return false;
}
//验证发信人信息
String auth = sendCommand("AUTH LOGIN"+lineFeet);
if(isStartWith(auth,"334")){
}else{
return false;
}
String user = sendCommand(new String(Base64.encode("*****".getBytes()))+lineFeet);
if(isStartWith(user,"334")){
}else{
return false;
}
String pass = sendCommand(new String(Base64.encode("*****".getBytes()))+lineFeet);
if(isStartWith(pass,"235")){
}else{
return false;
}
//发送指令
String f = sendCommand("Mail From:<"+from+">"+lineFeet);
if(isStartWith(f,"250")){
}else{
return false;
}
String toStr = sendCommand("RCPT TO:<"+to+">"+lineFeet);
if(isStartWith(toStr,"250")){
}else{
return false;
}
String data = sendCommand("DATA"+lineFeet);
if(isStartWith(data,"354")){
}else{
return false;
}
StringBuilder sb = new StringBuilder();
sb.append("From:<"+from+">"+lineFeet);
sb.append("To:<"+to+">"+lineFeet);
sb.append("Subject:test"+lineFeet);
sb.append("Date:2010/10/27 17:30"+lineFeet);
sb.append("Content-Type:text/plain;charset=\"GB2312\""+lineFeet);
sb.append(lineFeet);
sb.append(content);
sb.append(lineFeet+"."+lineFeet);
String conStr = sendCommand(sb.toString());
if(isStartWith(conStr,"250")){
}else{
return false;
}
//quit
String quit = sendCommand("QUIT"+lineFeet);
if(isStartWith(quit,"221")){
}else{
return false;
}
close();
return true;
}
private boolean isStartWith(String res,String with){
return res.startsWith(with);
}
public static void main(String[] args){
SocketMail mail = new SocketMail();
mail.setMailServer("smtp.163.com");
mail.setFrom("*****@163.com");
mail.setTo("*****@163.com");
mail.setContent("hello,this is a test mail!");
boolean boo = mail.sendMail();
if(boo)
System.out.println("邮件发送成功!");
else{
System.out.println("邮件发送失败!");
}
}
}
分享到:
相关推荐
Java Socket 实现 SMTP 协议发送邮件 Java Socket 是 Java 语言中用于实现网络编程的 API,通过 Socket,可以实现与远程服务器的通信。在这里,我们将使用 Java Socket 实现 SMTP 协议来发送邮件。 SMTP 协议简介 ...
2. **SMTP协议**:SMTP规定了邮件发送的格式和步骤,包括建立连接、身份验证、提交邮件等操作。在Java中,通常需要自定义SMTP通信的逻辑,例如使用`OutputStream`发送SMTP命令,处理服务器的响应。 3. **SMTP认证**...
Java Socket 实现 SMTP 发送邮件是一项常见的编程任务,尤其在自动化通知、系统间通信或用户交互中非常有用。SMTP(Simple Mail Transfer Protocol)是互联网上用于传输电子邮件的标准协议,而Java Socket则是Java...
总的来说,通过Java Socket实现SMTP邮件发送涉及到网络编程、SMTP协议理解、异常处理等多个知识点。这种技术在日常工作中非常实用,可以方便地集成到各种自动化任务或系统中,如定时发送报告、系统通知等。然而,...
在本案例中,我们将讨论如何使用Java Socket来实现SMTP(Simple Mail Transfer Protocol)邮件发送,并支持SSL(Secure Sockets Layer)或TLS(Transport Layer Security)安全协议。 SMTP是一种互联网标准,用于在...
SMTP(Simple Mail Transfer Protocol)是互联网上用于发送...如果你想要学习如何用Java发送邮件,理解这个项目中的`SMTPFrame.java`代码将非常有帮助,同时掌握SMTP协议的基本流程和Java Socket编程也是必不可少的。
总的来说,Java Socket结合SMTP协议可以实现基本的邮件发送功能,但实际应用中,使用专门的邮件库通常更为便捷和安全。然而,理解SMTP协议和Socket编程的基本原理对于开发者来说仍然非常重要,因为它有助于理解邮件...
2. **SMTP协议**:遵循标准的SMTP协议规范,确保与不同的邮件服务器兼容。 3. **错误处理**:实现异常处理机制,如超时、断开连接等情况下的重连策略。 4. **多线程管理**:优化服务器端的线程池,避免资源浪费和...
**SMTP协议**:SMTP是一种用于在互联网上发送邮件的协议。它定义了邮件服务器之间交换邮件的标准格式和过程。SMTP服务器通常用于将邮件从发件人的邮箱传递到收件人的邮箱。SMTP交互通常包括认证、连接、邮件传输和...
在本文中,我们将探讨如何使用Java语言来实现一个基本的SMTP服务器,这将涵盖SMTP协议的基础概念、关键操作以及具体的Java代码实现。 #### SMTP协议概览 SMTP协议允许邮件从发件人传递到收件人的邮件服务器上,它...
总的来说,通过Java的Socket实现EMAIL发送,虽然相对复杂,但有助于深入理解网络通信和SMTP协议的工作原理。如果你正在学习网络编程或者想要深入了解邮件发送的底层机制,这是一个非常有价值的实践项目。
自己用java socket编程,按照smtp协议及pop3协议进行编写的服务器程序,是在Outlook Express上面可以完全运作的两个服务器,里面详细的写出了代码的注释,以及Outlook Express运行发送接收下载删除邮件操作的步骤........
然后,使用SMTP协议发送邮件,这个过程涉及构建邮件头部(包括发件人、收件人信息)和邮件正文,并将它们发送到指定的邮件服务器。接收邮件则需要使用POP3协议,通过连接到邮件服务器,获取邮件列表,下载邮件内容到...
虽然现代的邮件发送库如JavaMail提供了更高级的功能和错误处理,但对于学习网络编程原理和SMTP协议来说,基于Socket的实现是一个很好的起点。通过理解并实践这一过程,开发者可以更好地掌握网络通信的基础知识,为...
- 虽然题目要求的是纯Socket方式,但通常推荐使用JavaMail API来发送邮件,因为它封装了SMTP协议的复杂性,提供更高级别的接口。 - JavaMail API包括`javax.mail`和`javax.mail.internet`包,可以方便地处理邮件头...
本篇将详细讲解如何利用Java的Socket编程来实现邮件的发送和接收。 首先,我们来看标签中的"源码"和"工具",这暗示我们将探讨的是具体的编程实现和可能的实用工具。在这个场景下,`POP3Demo.java`和`sendSMTPMail....
Java Socket电子邮件发送与接收是基于Java网络编程技术实现的一种通信方式,主要涉及到Java的Socket类以及Email相关的API。本项目是一个课程项目,开发者通过几天的努力完成了一个具备图形用户界面(GUI)的邮件系统...
6. **Transport**: 负责将创建好的Message对象发送到指定的邮件服务器,使用SMTP协议。 在Java Socket邮件客户端的实现中,通常会遵循以下步骤: 1. **配置邮件服务器**:使用Properties对象设置SMTP服务器的相关...