socket实现邮件发送
2014-04-15 13:46
381 查看
通过java的网络编程特性,完成邮件发送的功能,效果图如下:
首先新建一个maiTest的java项目,
然后新建GBC.java和MailTest.java文件
GBC.java代码如下:
MailTest.java的代码如下:
运行即出现效果图
首先新建一个maiTest的java项目,
然后新建GBC.java和MailTest.java文件
GBC.java代码如下:
package ch02; import java.awt.*; public class GBC extends GridBagConstraints { public GBC(int gridx, int gridy) { this.gridx = gridx; this.gridy = gridy; } public GBC(int gridx, int gridy, int gridwidth, int gridheight) { this.gridx = gridx; this.gridy = gridy; this.gridwidth = gridwidth; this.gridheight = gridheight; } public GBC setAnchor(int anchor) { this.anchor = anchor; return this; } public GBC setFill(int fill) { this.fill = fill; return this; } public GBC setWeight(double weightx, double weighty) { this.weightx = weightx; this.weighty = weighty; return this; } public GBC setInsets(int distance) { this.insets = new Insets(distance, distance, distance, distance); return this; } public GBC setInsets(int top, int left, int bottom, int right) { this.insets = new Insets(top, left, bottom, right); return this; } public GBC setIpad(int ipadx, int ipady) { this.ipadx = ipadx; this.ipady = ipady; return this; } }
MailTest.java的代码如下:
package ch02; import java.awt.*; import java.awt.event.*; import java.util.*; import java.net.*; import java.io.*; import javax.swing.*; public class MailTest { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { JFrame frame = new MailTestFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }); } } class MailTestFrame extends JFrame { public MailTestFrame() { setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); setTitle("MailTest"); setLayout(new GridBagLayout()); add(new JLabel("From:"), new GBC(0, 0).setFill(GBC.HORIZONTAL)); from = new JTextField(20); add(from, new GBC(1, 0).setFill(GBC.HORIZONTAL).setWeight(100, 0)); add(new JLabel("To:"), new GBC(0, 1).setFill(GBC.HORIZONTAL)); to = new JTextField(20); add(to, new GBC(1, 1).setFill(GBC.HORIZONTAL).setWeight(100, 0)); add(new JLabel("SMTP server:"), new GBC(0, 2).setFill(GBC.HORIZONTAL)); smtpServer = new JTextField(20); add(smtpServer, new GBC(1, 2).setFill(GBC.HORIZONTAL).setWeight(100, 0)); message = new JTextArea(); add(new JScrollPane(message), new GBC(0, 3, 2, 1).setFill(GBC.BOTH).setWeight(100, 100)); comm = new JTextArea(); add(new JScrollPane(comm), new GBC(0, 4, 2, 1).setFill(GBC.BOTH).setWeight(100, 100)); JPanel buttonPanel = new JPanel(); add(buttonPanel, new GBC(0, 5, 2, 1)); JButton sendButton = new JButton("Send"); buttonPanel.add(sendButton); sendButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { // new SwingWorker<Void, Void>() // { // protected Void doInBackground() throws Exception // { // comm.setText(""); // sendMail(); // return null; // } // }.execute(); } }); } public void sendMail() { try { Socket s = new Socket(smtpServer.getText(), 25); InputStream inStream = s.getInputStream(); OutputStream outStream = s.getOutputStream(); in = new Scanner(inStream); out = new PrintWriter(outStream, true /* autoFlush */); String hostName = InetAddress.getLocalHost().getHostName(); receive(); send("HELO " + hostName); receive(); send("MAIL FROM: <" + from.getText() + ">"); receive(); send("RCPT TO: <" + to.getText() + ">"); receive(); send("DATA"); receive(); send(message.getText()); send("."); receive(); s.close(); } catch (IOException e) { comm.append("Error: " + e); } } public void send(String s) throws IOException { comm.append(s); comm.append("\n"); out.print(s.replaceAll("\n", "\r\n")); out.print("\r\n"); out.flush(); } public void receive() throws IOException { String line = in.nextLine(); comm.append(line); comm.append("\n"); } private Scanner in; private PrintWriter out; private JTextField from; private JTextField to; private JTextField smtpServer; private JTextArea message; private JTextArea comm; public static final int DEFAULT_WIDTH = 300; public static final int DEFAULT_HEIGHT = 300; }
运行即出现效果图
相关文章推荐
- SAX方式创建/解析xml
- spring导入多个配置文件
- java验证码/servlet
- struts2过滤器验证登陆状态
- java中四种主流xml解析方式介绍
- struts2加载多个配置文件
- struts2拦截器验证登陆状态
- Jdom方式创建/解析xml
- web使用displaytag显示表格(提供排序,链接,下载等等)
- Dom方式创建/解析xml
- spring事物管理
- spring的事物配置方式
- Android onMeasure,onFocusChanged方法介绍
- 刷新本地DNS缓存的方法
- 存储过程示例
- 第7周作业1-循环大战(WHILE语句)
- 子网的划分
- ffmpeg针对视频和音频裸码封装一点感想
- 纯CSS导航栏 demo
- Luence Solr Nutch说明