知识大全 java实现邮件发送
Posted 知
篇首语:大鹏一日同风起,扶摇直上九万里。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 java实现邮件发送相关的知识,希望对你有一定的参考价值。
要实现邮箱的发送 需要一个已知账号和密码的邮箱 并且开通了STMP POP 服务 常见主流邮箱邮件收取和发送pop stmp服务配置汇总介绍一文中详细介绍了各个邮箱开通服务的步骤 邮件发送是利用与邮件发送服务器建立的Socket连接 通过这个连接获得输入 输出流 再利用流在程序中输入特定的命令行来实现邮件的发送 下面是程序步骤 与邮件发送服务器建立器Socket连接(需要端口号和服务器名称) 用 HELO 命令注册到服务器上 用 AUTH LOGIN 命令 根据已有的邮箱账号和密码登陆到服务器 用 MAIL FROM<> 命令设置邮件源地址信息 用 MAIL TO<> 命令设置邮件目的地址信息 用 DATA FROM TO SUBJECT 命令分别设置发件人昵称 收件人昵称 主题信息和内容 +回车结束内容输入 最后用 QUIT 命令退出邮件发送服务 下面是程序代码 定义一个接口 主要是上面步骤方法的声明 SendMail java: package sunflower yuan sendmail;import java io IOException;/** * @author Caihanyuan * @time 上午 : : */public interface SendMail /** * 向服务器发送命令 * * @param order * 向服务器发送的命令行 * @return 返回服务器状态 * */ public int sendToServer(String order) /** * 解析服务器返回的应答信息 * * @return 返回服务器状态 * */ public int getResult() /** 与服务器发起会话 */ public void regist() throws IOException; /** 登录到服务器 */ public void login() throws IOException; /** 设置邮件源地址 */ public void setMailFrom() throws IOException; /** 设置邮件目的地址 */ public void setMailTo() throws IOException; /** 设置邮件内容 */ public void setData() throws IOException; /** 退出邮箱服务 */ public void quit() throws IOException; /** 发送邮件的主程序 */ public boolean sendMail() throws IOException; 接口的实现类
SendMailImp java: package sunflower yuan sendmail;import java io BufferedReader;import java io BufferedWriter;import java io IOException;import java io InputStreamReader;import java io OutputStreamWriter;import Socket;import UnknownHostException;import java util StringTokenizer;import sun misc BASE Encoder;/** * @author Caihanyuan * @time 上午 : : */public class SendMailImp implements SendMail public static final int SINA = ; public static final int QQ = ; public static final int FOXMAIL = ; public static final int WANGYI = ; public static final int WANGYI = ; public static final int YEAH = ; public static final int HOTMAIL = ; public static final int YAHOO = ; public static final int GMAIL = ; /** 用于向服务器发起连接 */ private Socket socket = null; /** 与服务器连接后的输入流 */ private BufferedReader input = null; /** 与服务器连接后的输出流 */ private BufferedWriter output = null; /** 发送邮件服务器名称 */ private String server = null; /** 发送端口号 */ private int port; /** 邮件信息 */ private MailMessage message; public MailMessage getMessage() return message; //设置邮件的信息内容 以方法链的方式实现 public SendMailImp setMessage(MailMessage message) ssage = message; return this; public Socket getSocket() return socket; public void setSocket(Socket socket) this socket = socket; public BufferedReader getInput() return input; public void setInput(BufferedReader input) this input = input; public BufferedWriter getOutput() return output; public void setOutput(BufferedWriter output) this output = output; 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 static SendMailImp getInstance(int sendMailType) SendMailImp sendMailImp = new SendMailImp() switch (sendMailType) case SINA: sendMailImp setServer( ) sendMailImp setPort( ) break; case QQ: case FOXMAIL: sendMailImp setServer( ) sendMailImp setPort( ) break; case WANGYI : sendMailImp setServer( ) sendMailImp setPort( ) break; case WANGYI : sendMailImp setServer( ) sendMailImp setPort( ) break; case YEAH: sendMailImp setServer( ) sendMailImp setPort( ) break; case YAHOO: sendMailImp setServer( ) sendMailImp setPort( ) break; case GMAIL: sendMailImp setServer( ) sendMailImp setPort( ) break; case HOTMAIL: sendMailImp setServer( ) sendMailImp setPort( ) break; default: break; try // 与发送邮件服务器建立Socket连接 并得到输入输出流 Socket socket = new Socket(sendMailImp getServer() sendMailImp getPort()) BufferedReader input = new BufferedReader(new InputStreamReader( socket getInputStream())) BufferedWriter output = new BufferedWriter(new OutputStreamWriter( socket getOutputStream())) sendMailImp setSocket(socket) sendMailImp setInput(input) sendMailImp setOutput(output) catch (UnknownHostException e) e printStackTrace() catch (IOException e) e printStackTrace() return sendMailImp; public int sendToServer(String order) try this getOutput() write(order) this getOutput() newLine() this getOutput() flush() System out println( 已发送命令 + order) catch (IOException e) e printStackTrace() return getResult() public int getResult() String line = ; try line = this getInput() readLine() System out println( 服务器返回状态 + line) catch (IOException e) e printStackTrace() // 从服务器返回消息中取得状态码 并转换成整数返回 StringTokenizer get = new StringTokenizer(line ) return Integer parseInt(get nextToken()) public void regist() throws IOException int result = getResult() // 连接上服务器后 服务器给出 应答 if (result != ) throw new IOException( 连接服务器失败 ) result = sendToServer( HELO + this getServer()) // HELO命令成功后 服务器返回 应答 if (result != ) throw new IOException( 注册邮件服务器失败 ) public void login() throws IOException BASE Encoder encode = new BASE Encoder() int result = sendToServer( AUTH LOGIN ) // 登陆服务成功 服务器返回 应答 if (result != ) throw new IOException( 登陆服务失败 ) // 对邮箱用户名进行验证 result = sendToServer(encode encode(ssage getUser() getBytes())) if (result != ) throw new IOException( 用户名错误 ) // 对邮箱密码进行验证 result = sendToServer(encode encode(message getPassword() getBytes())) if (result != ) throw new IOException( 用户验证错误 ) public void setMailFrom() throws IOException int result = sendToServer( MAIL FROM:< + this getMessage() getFrom() + > ) if (result != ) throw new IOException( 邮件源地址错误 ) public void setMailTo() throws IOException int result = sendToServer( RCPT TO:< + this getMessage() getTo() + > ) if (result != ) throw new IOException( 邮件目的地址错误 ) public void setData() throws IOException int result = sendToServer( DATA ) // 输入date回车后 若收到 应答后 继续输入邮件内容 if (result != ) throw new IOException( 不能发送数据 ) this getOutput() write( FROM: + this getMessage() getDatafrom()) this getOutput() newLine() this getOutput() write( TO: + this getMessage() getDatato()) this getOutput() newLine() this getOutput() write( SUBJECT: + this getMessage() getSubject()) this getOutput() newLine() this getOutput() newLine() this getOutput() write(this getMessage() getContent()) this getOutput() newLine() // 句点加回车结束邮件内容输入 result = sendToServer( ) if (result != ) throw new IOException( 发送数据错误 ) public void quit() throws IOException int result = sendToServer( QUIT ) if (result != ) throw new IOException( 未能正确退出 ) this getInput() close() this getOutput() close() public boolean sendMail() boolean success = true; try // 注册到发送邮件服务器 regist() // 登陆到服务器 login() // 设置邮件源地址 setMailFrom() // 设置邮件目的地址 setMailTo() // 设置邮件体 setData() // 退出邮件 quit() catch (Exception e) e printStackTrace() success = false; return success; 邮件信息的实体类 MailMessage java: package sunflower yuan sendmail;/** * @author Caihanyuan * @time 下午 : : */public class MailMessage // 发件人 private String from; // 收件人 private String to; // 发件人 在邮件中显示 private String datafrom; // 收件人 在邮件中显示 private String datato; // 主题 private String subject; // 内容 private String content; // 日期 private String date; // 发送邮箱用户名 邮箱名的前缀 private String user; // 发送邮箱密码 private String password; 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 getDatafrom() return datafrom; public void setDatafrom(String datafrom) this datafrom = datafrom; public String getDatato() return datato; public void setDatato(String datato) this datato = datato; public String getSubject() return subject; public void setSubject(String subject) this subject = subject; public String getContent() return content; public void setContent(String content) ntent = content; public String getDate() return date; public void setDate(String date) this date = date; public String getUser() return user; public void setUser(String user) this user = user; public String getPassword() return password; public void setPassword(String password) this password = password; 测试类 Test java: package sunflower yuan test;import java io IOException;import sunflower yuan sendmail MailMessage;import sunflower yuan sendmail SendMail;import sunflower yuan sendmail SendMailImp;/** * @author Caihanyuan * @time 下午 : : */public class Test public static void main(String[] args) MailMessage message = new MailMessage() message setFrom( caih**** ) message setTo( ***** ) message setSubject( 这个是一个邮件发送测试 ) message setUser( caih**** ) message setContent( Hello this is a mail send test\\n你好这是一个邮件发送测试 ) message setDatafrom( caih**** ) message setDatato( **** ) message setPassword( ***** ) SendMail send = SendMailImp getInstance(SendMailImp WANGYI ) setMessage(message) try send sendMail() catch (IOException e) e printStackTrace() 要注意的是setUser()里面的字符信息是邮件源地址的前缀 程序运行效果 cha138/Article/program/Java/hx/201311/25888相关参考
cha138/Article/program/Java/JSP/201404/30613
基于SMTP的JAVA邮件发送程序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 这个程序没有使
在Java中发送邮件的一个相当完善的脚本 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! pack
先添加引入命名空间SystemNetMail 组件代码: ///<summary> ///邮件发送组件 ///</summary> publicclassEmai
.NET邮件发送 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! usingSystem;&nbs
使用JavaMail实现邮件发送 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! im
知识大全 QQ三国会员 邮件发送附件能发送三国币吗拜托各位大神
QQ三国会员邮件发送附件能发送三国币吗拜托各位大神 以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!QQ
如何使用JSP来发送邮件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! MESSAGEJSP
我们经常看到在一些博客页面里可以发表评论通过电子邮件通知版主(例如咱们的博客园)那么如何用发送电子邮件呢?我们可以借助NET提供的强大的类库达到目的 首先我们要引入SystemWebMail命名