SMTP协议模拟发送邮件(java)

简述

c语言,java和python都有封装smtp相关邮件协议。直接拿来用就完了。在java里要导入两个包。官网上不去可以到菜鸟教程去下。
https://www.runoob.com/java/java-sending-email.html
里面有详细的讲述。
完了怎么把两个第三方包加入项目呢?

导入jar

如果是idea的话就去file->project construction->modules里面找到导入dictionary或jar的选项,把包含你的jar的文件夹(导入文件夹下所有东西)或jar文件就完了。弄好在项目资源管理器的拓展包里能看到。

代码

package Send;
import com.sun.mail.util.MailSSLSocketFactory;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.security.GeneralSecurityException;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.swing.*;
import java.awt.*;

public class Main extends JFrame implements ActionListener, FocusListener {
    JTextField rcver;
    JTextField header;
    JPanel info;
    JTextField mainText;
    JPanel text;
    JButton send;
    public void Send(){
        try {
            Properties prop = new Properties();
            prop.setProperty("mail.host", "smtp.qq.com");  设置QQ邮件服务器
            prop.setProperty("mail.transport.protocol", "smtp"); // 邮件发送协议
            prop.setProperty("mail.smtp.auth", "true"); // 需要验证用户名密码

            // 关于QQ邮箱,还要设置SSL加密,加上以下代码即可
            MailSSLSocketFactory sf = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            prop.put("mail.smtp.ssl.enable", "true");
            prop.put("mail.smtp.ssl.socketFactory", sf);

            //使用JavaMail发送邮件的5个步骤

            //创建定义整个应用程序所需的环境信息的 Session 对象
            Session session = Session.getDefaultInstance(prop, new Authenticator() {
                public PasswordAuthentication getPasswordAuthentication() {
                //发件人邮件用户名、授权码
                return new PasswordAuthentication(
                        "110@qq.com", "woc");
                }
            });
            //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
            session.setDebug(true);
            //2、通过session得到transport对象
            Transport ts = session.getTransport();
            //3、使用邮箱的用户名和授权码连上邮件服务器
            ts.connect(
                    "smtp.qq.com", "110@qq.com", "woc");
            //4、创建邮件
            //创建邮件对象
            MimeMessage message = new MimeMessage(session);
            //指明邮件的发件人
            message.setFrom(new InternetAddress("110@qq.com"));
            //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
            message.setRecipient(Message.RecipientType.TO,
                    new InternetAddress(rcver.getText()));
            //邮件的标题
            message.setSubject(header.getText());
            //邮件的文本内容
            message.setContent(mainText.getText(), "text/html;charset=UTF-8");
            //5、发送邮件
            ts.sendMessage(message, message.getAllRecipients());

            ts.close();
        } catch (GeneralSecurityException e) {
            e.printStackTrace();
        } catch (AddressException e) {
            e.printStackTrace();
        } catch (NoSuchProviderException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
    public void initPanel(){
        header=new JTextField("title");
        header.setColumns(20);
        header.addFocusListener(this);
        rcver=new JTextField("receiver");
        rcver.setColumns(20);
        rcver.addFocusListener(this);
        info =new JPanel();
        info.setPreferredSize(new Dimension(500, 50));
        info.setBackground(Color.white);
        info.setBorder(BorderFactory.createTitledBorder("header"));
        info.add(header);
        info.add(rcver);

        mainText=new JTextField();
        mainText.setColumns(40);
        mainText.addFocusListener(this);
        text=new JPanel();
        text.setPreferredSize(new Dimension(500, 50));
        text.setBackground(Color.white);
        text.setBorder(BorderFactory.createTitledBorder("Main Text"));
        text.add(mainText);

        send=new JButton("send");
        send.addActionListener(this);
    }
    public void makeJFrame(){
        this.setTitle("MyEmail");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLayout(new FlowLayout());
        this.add(info);
        this.add(text);
        this.add(send);
        this.setVisible(true);
        this.setSize(520,200);
    }
    public Main(){
        initPanel();
        makeJFrame();
    }
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==send){
            Send();
        }
    }
    public void focusGained(FocusEvent e) {
        Color myGray=new Color(241,243,244);
        if (e.getSource()==rcver) {rcver.setText("");rcver.setBackground(myGray);}
        else if (e.getSource()==header) {header.setText("");header.setBackground(myGray);}
        else if (e.getSource()==mainText){ mainText.setText("");mainText.setBackground(myGray);}
    }
    public void focusLost(FocusEvent e) {
        if (e.getSource()==rcver) {rcver.setText(rcver.getText());rcver.setBackground(Color.white);}
        else if (e.getSource()==header) {header.setText(header.getText());header.setBackground(Color.white);}
        else if (e.getSource()==mainText) {mainText.setText(mainText.getText());mainText.setBackground(Color.white);}
    }
    public static void main(String[] args) throws Exception{
        new Main();
    }
}

服务器交互过程

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值