java socket发送邮件

本文介绍了一个使用Java实现的简单邮件发送程序。该程序通过SMTP协议连接邮件服务器,并实现了基本的身份验证和邮件发送功能。示例代码展示了如何设置邮件服务器、账号、收发件人等信息,并发送包含文本内容的邮件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package org.whsvc.pop.mail;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Date;
import java.util.Vector;

public class JMail implements Send {
private Socket client = null;
private String from_address = null, account = null, password = null,to_address;
private StringBuffer body = new StringBuffer();
private PrintWriter out = null;
private BufferedReader in = null;
private String date = new Date().toLocaleString();
private String from_name = null, to_name = null, subject = null,
    content_Type = "Content-Type: text/plain;charset=\"GB2312\"";
private boolean isAuthLogin = true;
private String serverName = null;
private int port = 25;

public boolean destory() throws Exception {
   client.close();
   in.close();
   out.close();
   response("Done");
   return true;

}

public JMail(String from_address, String account, String password,
    String serverName) {
   super();
   this.from_address = from_address;
   this.account = account;
   this.password = password;
   this.serverName = serverName;
   this.from_name = this.from_address;

}

public JMail() {

}

public int getPort() {
   return port;
}

public void setPort(int port) {
   this.port = port;
}

public String getServerName() {
   return serverName;
}

public void setServerName(String serverName) {
   this.serverName = serverName;
}

public String getFrom_address() {
   return from_address;
}

public void setFrom_address(String from_address) {
   this.from_address = from_address;
}


public String getTo_address() {
   return to_address;
}

public void setTo_address(String to_address) {
   this.to_address = to_address;
}

public String getAccount() {
   return account;
}

public void setAccount(String account) {
   this.account = account;
}

public String getPassword() {
   return password;
}

public void setPassword(String password) {
   this.password = password;
}

public void addBody(String content) {
   if (isAuthLogin) {

body.append("From: <" + this.from_name + ">\r\n");
    body.append("To: <" + this.to_name + ">\r\n");
    body.append("Subject: " + this.subject + "\r\n");
    body.append(this.content_Type + "\r\n");
    body.append("\r\n");
    body.append(content + "\r\n");
    body.append(".\r\n");

   }
}

public String getDate() {
   return date;
}

public void setDate(String date) {
   this.date = date;
}

public String getFrom_name() {
   return from_name;
}

public void setFrom_name(String from_name) {
   this.from_name = from_name;
}

public String getTo_name() {
   return to_name;
}

public void setTo_name(String to_name) {
   this.to_name = to_name;
}

public String getSubject() {
   return subject;
}

public void setSubject(String subject) {
   this.subject = subject;
}

public String getContent_Type() {
   return content_Type;
}

public void setContent_Type(String content_Type) {
   this.content_Type = content_Type;
}

public boolean isAuthLogin() {
   return (isAuthLogin != (this.account == null && this.password == null
     && this.from_address == null && this.to_address==null
     && this.serverName == null && this.body.length() > 1));
}

public void send() throws Exception {
   if (parse()) {
    out.println("QUIT");
   }
}

private boolean parse() {
   boolean isReady = false;
   if (this.account == null && this.password == null
     && this.from_address == null && this.to_address ==null
     && this.serverName == null && this.body.length() > 1) {
    isAuthLogin = false;
    isReady = false;
    return isReady;
   }
   try {
    client = new Socket(this.serverName, this.port);
    out = new PrintWriter(client.getOutputStream());
    in = new BufferedReader(new InputStreamReader(client
      .getInputStream()));
    response(in.readLine());
    out.println("ehlo MDJ");
    out.flush();
    response(in.readLine());
    out.println("AUTH LOGIN");
    out.flush();
    response(in.readLine());
    response(in.readLine());
    response(in.readLine());
    response(in.readLine());
    out.println(Encode(this.account));
    out.flush();
    response(in.readLine());
    out.println(Encode(this.password));
    out.flush();
    response(in.readLine());
    out.println("mail from: <"+getFrom_address()+">");
    out.flush();
    response(in.readLine());
    out.println("rcpt to: <"+getTo_address()+">");
    out.flush();
    response(in.readLine());
    out.println("data");
    out.flush();
    response(in.readLine());
    /**
    * out.print("from: <"+this.from_address+">\n");
    * out.print("to: <"+this.from_name+">");
    * out.print("Subject: <"+this.from_name+">\n"); out.print("\n\n");
    */
    out.println(body.toString());
    out.flush();
    response(in.readLine());
    response(in.readLine());
    // out.println("<CRLF>.<CRLF>");
    isReady = true;
   } catch (UnknownHostException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }
   return isReady;
}

public void response(String msg) {
   System.out.println(msg);

}

public String Encode(String s) {
   String old = null;
   if (s == "" || s.equals("")) {
    old = "";
   }
   try {
    old = new sun.misc.BASE64Encoder().encode(s.getBytes());
   } catch (Exception e) {
    e.printStackTrace();
   }
   return old;
}

}


Test.java

package org.whsvc.pop.mail;

import java.util.Date;

public class Test {

/**
* @param args
*/
public static void main(String[] args)
{
   JMail mail=new JMail();
   mail.setServerName("smtp.163.com");
   mail.setDate(new Date().toString());
   mail.setAccount("mengdejun_520");
   mail.setFrom_address("mengdejun_520@163.com");
   mail.setTo_address("280759843@qq.com");
   mail.setPassword("*****");
   mail.setFrom_name("mengdejun_520@163.com");
   mail.setPort(25);
   mail.setSubject("test");
   mail.setTo_name("mengdejun_168@126.com");
   mail.addBody("你好吗?java编程!"+new Date());
   try 
   {
    mail.send();
    mail.destory();
   } catch (Exception e) {
    e.printStackTrace();
   }
  
}


}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值