MailTest

GridBagLayout把一个界面分为m行n列的网格

gridx表示组件位于第几列,gridy表示组件位于第几行
gridwidth表示组件占几列,gridheight表示组件占几行
fill指定当组件小于单元格大小时的填充方式
anchor表示当组件小于单元格大小时的对齐方式
weighx表示当界面有收缩放大时,组件的宽度收缩放大的程度,
weighty表示组件高度收缩放大的程度
ipadx表示组件最小的宽度,
ipady表示组件最小的高度

package swing.mail;

import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingWorker;

/*2015-7-7*/
public class MailTest {
    public static void main(String[] args) {
        JFrame frame = new MailTestFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
    }

}

class MailTestFrame extends JFrame {
    private static final long serialVersionUID = 1L;

    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;

    public MailTestFrame() {
        setTitle("MailTest");
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

        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() {

            @Override
            public void actionPerformed(ActionEvent e) {
                new SwingWorker<Void, Void>() {

                    @Override
                    protected Void doInBackground() throws Exception {
                        comm.setText("");
                        sendMail();
                        return null;
                    }
                }.execute();

            }
        });

    }

    public void sendMail() {
        try {
            Socket s = new Socket(smtpServer.getText(), 25);
            InputStream inputStream = s.getInputStream();
            OutputStream outputStream = s.getOutputStream();

            in = new Scanner(inputStream);
            out = new PrintWriter(outputStream, true);

            String hostName = InetAddress.getLocalHost().getHostName();
            receive();
            send("Hello" + 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 (Exception e) {
            comm.append("Error:" + e);

        }

    }

    private void send(String string) {
        comm.append(string);
        comm.append("\n");
        out.println(string.replace("\n", "\r\n"));
        out.print("\r\n");
        out.flush();
    }

    private void receive() {
        String line = in.nextLine();
        comm.append(line);
        comm.append("\n");
    }

}
package swing.mail;

import java.awt.GridBagConstraints;

/**
 * This class simplifies the use of the GridBagConstraints class.
 */
public class GBC extends GridBagConstraints
{
    private static final long serialVersionUID = 1L;

    /**
     * Constructs a GBC with a given gridx and gridy position and all other grid
     * bag constraint values set to the default.
     *
     * @param gridx
     *            the gridx position
     * @param gridy
     *            the gridy position
     */
    public GBC(int gridx, int gridy)
    {
        this.gridx = gridx;
        this.gridy = gridy;
    }

    /**
     * Constructs a GBC with given gridx, gridy, gridwidth, gridheight and all
     * other grid bag constraint values set to the default.
     *
     * @param gridx
     *            the gridx position
     * @param gridy
     *            the gridy position
     * @param gridwidth
     *            the cell span in x-direction
     * @param gridheight
     *            the cell span in y-direction
     */
    public GBC(int gridx, int gridy, int gridwidth, int gridheight) {
        this.gridx = gridx;
        this.gridy = gridy;
        this.gridwidth = gridwidth;
        this.gridheight = gridheight;
    }

    /**
     * Sets the cell spans.
     *
     * @param gridwidth
     *            the cell span in x-direction
     * @param gridheight
     *            the cell span in y-direction
     * @return this object for further modification
     */
    public GBC setSpan(int gridwidth, int gridheight)
    {
        this.gridwidth = gridwidth;
        this.gridheight = gridheight;
        return this;
    }

    /**
     * Sets the anchor.
     *
     * @param anchor
     *            the anchor value
     * @return this object for further modification
     */
    public GBC setAnchor(int anchor)
    {
        this.anchor = anchor;
        return this;
    }

    /**
     * Sets the fill direction.
     *
     * @param fill
     *            the fill direction
     * @return this object for further modification
     */
    public GBC setFill(int fill)
    {
        this.fill = fill;
        return this;
    }

    /**
     * Sets the cell weights.
     *
     * @param weightx
     *            the cell weight in x-direction
     * @param weighty
     *            the cell weight in y-direction
     * @return this object for further modification
     */
    public GBC setWeight(double weightx, double weighty)
    {
        this.weightx = weightx;
        this.weighty = weighty;
        return this;
    }

    /**
     * Sets the insets of this cell.
     *
     * @param distance
     *            the spacing to use in all directions
     * @return this object for further modification
     */
    public GBC setInsets(int distance)
    {
        this.insets = new java.awt.Insets(
                distance, distance, distance, distance);
        return this;
    }

    /**
     * Sets the insets of this cell.
     *
     * @param top
     *            the spacing to use on top
     * @param left
     *            the spacing to use to the left
     * @param bottom
     *            the spacing to use on the bottom
     * @param right
     *            the spacing to use to the right
     * @return this object for further modification
     */
    public GBC setInsets(int top, int left, int bottom, int right)
    {
        this.insets = new java.awt.Insets(
                top, left, bottom, right);
        return this;
    }

    /**
     * Sets the internal padding
     *
     * @param ipadx
     *            the internal padding in x-direction
     * @param ipady
     *            the internal padding in y-direction
     * @return this object for further modification
     */
    public GBC setIpad(int ipadx, int ipady)
    {
        this.ipadx = ipadx;
        this.ipady = ipady;
        return this;
    }
}

http://bbs.csdn.net/topics/300244821

时间: 2024-11-08 00:27:45

MailTest的相关文章

Java发送QQ邮件

面试的时候被问到这个问题,别人问我用Java发过邮件没有,被问得一脸懵逼.然后就研究了一下,不是很难,按照网上的方法折腾了几天就搞出来了. 首先,使用QQ邮箱发送邮件之前需要在邮箱里面配置,开启pop3和smtp服务,其实这就是两个网络协议,一个是接受邮件的协议,一个是发送邮件的协议: POP3 是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议.它是因特网电子邮件的第一个离线协议标准,P

使用JavaMail发送邮件

一.邮件的相关概念 邮件协议.主要包括: SMTP协议:Simple Mail Transfer Protocol,即简单邮件传输协议,用于发送电子邮件 POP3协议:Post Office Protocol 3,即邮局协议的第三个版本,用于接收邮件 IMAP协议:Internet Message Access Protocol,即互联网消息访问协议,是POP3的替代协议 二.搭建James邮件服务器 James是Apache的一个开源项目,纯Java实现 搭建James服务器 ① 下载apac

JavaMail

一.邮件的相关概念 邮件协议.主要包括: SMTP协议:Simple Mail Transfer Protocol,即简单邮件传输协议,用于发送电子邮件 POP3协议:Post Office Protocol 3,即邮局协议的第三个版本,用于接收邮件 IMAP协议:Internet Message Access Protocol,即互联网消息访问协议,是POP3的替代协议 二.搭建James邮件服务器 James是Apache的一个开源项目,纯Java实现 搭建James服务器 ① 下载apac

扩展Puppet – 建立Puppet CA集群

扩展Puppet – 建立Puppet CA集群  (1 votes, average: 5.00 out of 5) 588 views 2012 年 3 月 4 日Puppet.运维ca.master.puppet.集群jsxubar 扩展Puppet的一种方式是将Puppet Master的CA功能分离出去,建立Puppet CA集群,集中处理CA的任务,从而提高整个Puppet系统的吞吐量. 本教程是上一个教程:扩展Puppet – 建立Puppet Master集群的继续. 我们要实现

JavaMail发送邮件

发送邮件包含的内容有: from字段  --用于指明发件人 to字段      --用于指明收件人 subject字段  --用于说明邮件主题 cc字段     -- 抄送,将邮件发送给收件人的同时抄送给另一个收件人,收件人可以看到邮件抄送给了谁 bcc字段   -- 密送,将邮件发送给收件人的同时将邮件秘密发送给另一个收件人,收件人无法看到邮件密送给了谁 邮件体指的就是邮件的具体内容. 使用JavaMail创建邮件和发送邮件 JavaMail创建的邮件是基于MIME协议的.因此可以使用Java

JavaMail和James的秘密花园

JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序. JavaMail包中用于处理电子邮件的核心类是:Session,Message,Address,Authenticator,Store,Transport, Folder等.Session定义了一个基本的邮件会话,它需要从Properties中读取类似于邮件服务器

Spring JavaMail发送邮件

一.邮件的相关概念 邮件协议.主要包括: SMTP协议:Simple Mail Transfer Protocol,即简单邮件传输协议,用于发送电子邮件 POP3协议:Post Office Protocol 3,即邮局协议的第三个版本,用于接收邮件 IMAP协议:Internet Message Access Protocol,即互联网消息访问协议,是POP3的替代协议 二.搭建James邮件服务器 James是Apache的一个开源项目,纯Java实现 搭建James服务器 ① 下载apac

Exchange Server 2016 独立部署/共存部署 (七)&mdash;&mdash; DAG功能测试

搭建好了DAG,又建好了DAG复制网络,最后又创建了副本数据库,只有这三部都完成了,那么恭喜你,你的Exchange 2016 DAG功能才算彻底完成,那么今天我们就来测试一下这个DAG功能的效果. 首先,我们看一下配置好的DAG功能的状态 由于主数据库在mail01,我们登录到mail02上,使用下述命令看一下复制状态 Get-MailboxDatabaseCopyStatus 从上图中我们可以看到位于 mail02上面的两个数据库MDB01和MDB02处于健康复制状态,且复制队列为0,说明实

物联网-手机远程控制家里的摄像头(1)

有这样一个想法,家里摆一个摄像头作为安防用途或者监控小孩子.宠物等, 远端的手机可以通过向摄像头发送指令来控制摄像头. 首先,这种想法已经有成熟的产品了,但是这样的产品有缺陷: 1.没法自己DIY一些功能,出了BUG时只能等待厂家的固件 2.因为要用到服务商的云平台,可能因此每年产生几百块的服务费 3.平台无法复用,比如无法添加NAS功能 4.隐私泄露的问题 这样的产品的需求是: 1.低功耗,因为需要24小时运行 2.高清摄像,红外夜视(可选),容易看清贼的脸 3.稳定的代码 4.历史记录查看功