实现代码:

注意点:

  • 需要的jar包:JavaMail API 和Java Activation Framework (JAF) ,下载可参考菜鸟教程
  • 默认使用QQ邮箱发送,需要设置授权,设置-->账户->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
  • 发件人代码中已设置,只需提供收件人邮箱
import com.sun.mail.util.MailSSLSocketFactory;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.io.File;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Properties; /**
* @author xiaoming
* @create 2021-03-04 9:52
*/
public class Email { public static void main(String[] args) {
JFrame jFrame = new JFrame("Send Email");
jFrame.setBounds(500, 200, 600, 700);
// 设置窗口不可拉伸
jFrame.setResizable(false);
jFrame.add(new SendPanel(jFrame));
jFrame.setVisible(true);
// 设置窗口关闭
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
} class SendPanel extends JPanel {
private String EmailTo;
private String Subject;
private String Text;
private String FileName;
JFrame jFrame;
public SendPanel(JFrame jFrame) {
this.jFrame=jFrame;
setBounds(0, 0, 600, 700);
JLabel jLabelTo = new JLabel("收件人");
jLabelTo.setLocation(100, 70);
jLabelTo.setSize(50, 50)
JTextField jTextFieldTo = new JTextField(1);
jTextFieldTo.setLocation(150, 80);
jTextFieldTo.setSize(300, 30);
jTextFieldTo.setToolTipText("请输入QQ邮箱地址");
jTextFieldTo.setText("请输入QQ邮箱地址");
jTextFieldTo.setBackground(new Color(204, 204, 204)); // 设置焦点监听
jTextFieldTo.addFocusListener(new FocusListener(){
@Override
public void focusGained(FocusEvent e) {
if ("请输入QQ邮箱地址".equals(jTextFieldTo.getText())){
jTextFieldTo.setText("");
jTextFieldTo.setBackground(Color.white);
}
}
@Override
public void focusLost(FocusEvent e) {
if (jTextFieldTo.getText().length()<1){
jTextFieldTo.setText("请输入QQ邮箱地址");
jTextFieldTo.setBackground(new Color(204, 204, 204));
}else {
EmailTo=jTextFieldTo.getText();
String regex="[1-9][0-9]{8,10}\\@[q][q]\\.[c][o][m]";
if (!EmailTo.matches(regex)){
JOptionPane.showMessageDialog(jTextFieldTo,"输入邮箱错误,请输入QQ邮箱","提示",JOptionPane.ERROR_MESSAGE);
}
System.out.println(EmailTo);
} }
});
JLabel jLabelSubject = new JLabel("主题");
jLabelSubject.setLocation(110,150);
jLabelSubject.setSize(50,50);
JTextField jTextFieldSubject = new JTextField(1);
jTextFieldSubject.setLocation(150, 160);
jTextFieldSubject.setSize(300, 30);
jTextFieldSubject.setToolTipText("请输入邮件主题");
jTextFieldSubject.setText("请输入邮件主题");
jTextFieldSubject.setBackground(new Color(204, 204, 204));
// 设置焦点监听
jTextFieldSubject.addFocusListener(new FocusListener(){ @Override
public void focusGained(FocusEvent e) {
if ("请输入邮件主题".equals(jTextFieldSubject.getText())){
jTextFieldSubject.setText("");
jTextFieldSubject.setBackground(Color.white);
}
}
@Override
public void focusLost(FocusEvent e) {
if (jTextFieldSubject.getText().length()<1){
jTextFieldSubject.setText("请输入邮件主题");
jTextFieldSubject.setBackground(new Color(204, 204, 204));
}else {
Subject=jTextFieldSubject.getText();
System.out.println(Subject);
}
}
});
JLabel jLabelText = new JLabel("正文");
jLabelText.setSize(50,50);
jLabelText.setLocation(110,250);
JTextArea jTextAreaText= new JTextArea();
jTextAreaText.setSize(300,300);
jTextAreaText.setLocation(150,250);
jTextAreaText.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
}
@Override
public void focusLost(FocusEvent e) {
if (jTextAreaText.getText().length()<1 && jTextFieldTo.getText().length()>1 && jLabelSubject.getText().length()>1){
JOptionPane.showMessageDialog(jTextAreaText,"输入内容为空","提示",JOptionPane.INFORMATION_MESSAGE);
} else {
Text=jTextAreaText.getText();
}
}
});
JButton jButton=new JButton("发送");
jButton.setSize(200,50);
jButton.setLocation(390,600);
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try { if ("请输入QQ邮箱地址".equals(jTextFieldTo.getText())){
JOptionPane.showMessageDialog(jButton,"无收件人","提示",JOptionPane.ERROR_MESSAGE); }
boolean state=SendMessageState(EmailTo,Subject,Text,FileName);
if(state){
JOptionPane.showMessageDialog(jButton,"发送成功","提示",JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(jButton,"发送失败","提示",JOptionPane.ERROR_MESSAGE);
} } catch (GeneralSecurityException generalSecurityException) {
generalSecurityException.printStackTrace();
}
}
});
JButton jButtonSelectFile=new JButton("选择");
jButtonSelectFile.setSize(200,50);
jButtonSelectFile.setLocation(10,600);
jButtonSelectFile.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
//设置选择目录
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); int reg = chooser.showOpenDialog(null);
if(reg == JFileChooser.APPROVE_OPTION)
{
//获得选择到的文件
File file = chooser.getSelectedFile();
try {
FileName=file.getCanonicalPath();
} catch (IOException ioException) {
ioException.printStackTrace();
}
System.out.println(FileName);
}
}
});
setLayout(null);
add(jLabelTo);
add(jTextFieldTo);
add(jLabelSubject);
add(jTextFieldSubject);
add(jLabelText);
add(jTextAreaText);
add(jButton);
add(jButtonSelectFile);
}
public static Boolean SendMessageState(String to,String subject,String text,String fileName) throws GeneralSecurityException {
boolean state=false;
// 收件人邮箱
String TO=to;
// 发件人邮箱
String from="*********@qq.com";
// 发送邮件的主机
String host="smtp.qq.com";
// 获取系统的属性
Properties properties=System.getProperties(); // 设置邮件服务器
properties.setProperty("mail.smtp.host",host);
// 需要验证用户名密码
properties.put("mail.smtp.auth",true); // QQ邮箱使用SSL加密
MailSSLSocketFactory mailSSLSocketFactory = new MailSSLSocketFactory();
mailSSLSocketFactory.setTrustAllHosts(true);
properties.put("mail.smtp.ssl.enable",true);
properties.put("mail.smtp.ssl.socketFactory",mailSSLSocketFactory);
Session session = Session.getDefaultInstance(properties, new Authenticator() {
@Override
protected javax.mail.PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("2649144933@qq.com","vfaeejtwfrapecih") ;
}
});
MimeMessage mimeMessage=new MimeMessage(session);
try {
// 发送方
mimeMessage.setFrom(new InternetAddress(from));
// 接受方
mimeMessage.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress(TO));
// 邮件的标题/主题
mimeMessage.setSubject(subject);
//创建消息部分
MimeBodyPart MessagePart = new MimeBodyPart();
//添加正文
MessagePart.setText(text);
// 创建多重消息
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(MessagePart);
if (fileName!=null){
// 截取路径后面的文件名称
String name= fileName.substring(fileName.lastIndexOf("\\")+1);
System.out.println(name);
MessagePart=new MimeBodyPart();
FileDataSource fileDataSource = new FileDataSource(fileName);
MessagePart.setDataHandler(new DataHandler(fileDataSource));
MessagePart.setFileName(name);
multipart.addBodyPart(MessagePart);
}
// 发送完整消息
mimeMessage.setContent(multipart);
// 发送信息
Transport.send(mimeMessage);
state= true; } catch (MessagingException e) {
e.printStackTrace();
}
System.out.println(state);
return state;
}
}

使用界面:

使用效果:

Java GUI 实现发送邮件以及附件的更多相关文章

  1. Java实现发送邮件,图片,附件

    参照地址 1.JavaMail 介绍 JavaMail 是sun公司(现以被甲骨文收购)为方便Java开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一些常用的邮件协议,如前面 ...

  2. Java 阿里云 邮件(带附件)发送

    简单的使用. 阿里云每天免费200封 1000封才2块钱..465端口 使用正常25 端口 不正常 package com.gwzx.framework.utils; import java.util ...

  3. java邮件发送(含附件)

    1. [代码]java邮件发送(含附件)疯狂的IT人站长整理的:利用Java发送邮件(含附件)的例子:1.邮件发送的配置propertity文件内容如下:(utils.properties文件放在sr ...

  4. java mail邮件发送(带附件) 支持SSL

    java mail邮件发送(带附件)有三个类 MailSenderInfo.java package mail; import java.util.Properties; import java.ut ...

  5. SpringBoot 发送邮件和附件

    作者:yizhiwaz 链接:www.jianshu.com/p/5eb000544dd7 源码:https://github.com/yizhiwazi/springboot-socks 其他文章: ...

  6. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  7. JAVA GUI

    JAVA GUI中的事件处理:   委托事件模型:事件源对象和监听器对象具有绑定关系   一个监听器可以绑定多个事件源 一个事件源也可以绑定多个监听器 监听器有各自监听的事件类型   设置容器的布局管 ...

  8. paip.java gui swt/jface 最佳实践

    paip.java gui swt/jface 最佳实践 1. 工具:Eclipse +jigloo4 1 2. 安装插件: 1 1. IMPORT swt lib 2 2. 新建立窗体 2 3. 运 ...

  9. 写在学习Java GUI之前

    Java GUI就是用Java语言开发桌面应用,而Java又有三个Java GUI库,分别为AWT,Swing和SWT/JFace. 现在要学的是Swing库. 后记:开发桌面应用,不止一种技术,现在 ...

随机推荐

  1. 什么是Segue

    Storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象(简称Segue) Segue的属性 每一个Segue对象,都有3个属性唯一标识@property (non ...

  2. 有了Autolayout的UILabel

    在没有Autolayout之前,UILabel的文字内容总是居中显示,导致顶部和底部会有一大片空缺区域 有Autolayout之后,UILabel的bounds默认会自动包住所有的文字内容,顶部和底部 ...

  3. JSP页面 CTRL+F 功能实现

    .res { color: rgba(255, 0, 0, 1) } .result { background: rgba(255, 255, 0, 1) } --- js 部分 var oldKey ...

  4. alpakka-kafka(10)-用kafka实现分布式近实时交易

    随着网上购物消费模式热度的不断提高,网上销售平台上各种促销手段也层出不穷,其中"秒购"已经是各种网站普遍流行的促销方式了."秒购"对数据的实效性和精确性要求非常 ...

  5. php发送邮件 (phpmailer)

    1.首先下载phpMailer文件官方文件https://sourceforge.net/projects/phpmailer/: 还有class.smtp.php. 2.去配置一下发送邮件的服务器, ...

  6. MySQL架构原理之存储引擎InnoDB_Redo Log和BinLog

    Redo Log和Binlog是MySQL日志系统中非常重要的两种机制,有很多相似之处同时也有差别,本文探究两者细节和区别. 一.Redo Log 1.Redo Log介绍 Redo:顾名思义就是重做 ...

  7. Java并发基础之Compare And Swap/Set(CAS)

    什么是 CAS?CAS(Compare And Swap/Set)比较并交换, CAS 算法的过程是这样:它包含 3 个参数CAS(V,E,N). V 表示待更新的变量(内存值), E 表示预期值(旧 ...

  8. pagehelper 自循环启动报错

    问题原因 问题产生的原因是 ServiceA实现类中引入了ServiceB,而在ServiceB实现类中又引入了ServiceA,导致循环依赖注入. 其实在代码开发过程中应该尽量避免这种操作的出现,即 ...

  9. python3批量统计用户电脑配置

    最近领导想统计一下用户电脑配置信息.好几百人难道让我一个一个的去弄吗? 想想还是写个程序接收一下吧. 客户端 # -*- coding: utf-8 -*- #author:Guoyabin impo ...

  10. Python 中 selenium 库

    目录 selenium 基础语法 一. 环境配置 1. 安装环境 2. 配置参数 3. 常用参数搭配 4. 分浏览器启动 二. 基本语法 1. 元素定位 2. 控制浏览器操作 3. 操作元素的方法 3 ...