Java GUI 实现发送邮件以及附件
实现代码:
注意点:
- 需要的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 实现发送邮件以及附件的更多相关文章
- Java实现发送邮件,图片,附件
参照地址 1.JavaMail 介绍 JavaMail 是sun公司(现以被甲骨文收购)为方便Java开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一些常用的邮件协议,如前面 ...
- Java 阿里云 邮件(带附件)发送
简单的使用. 阿里云每天免费200封 1000封才2块钱..465端口 使用正常25 端口 不正常 package com.gwzx.framework.utils; import java.util ...
- java邮件发送(含附件)
1. [代码]java邮件发送(含附件)疯狂的IT人站长整理的:利用Java发送邮件(含附件)的例子:1.邮件发送的配置propertity文件内容如下:(utils.properties文件放在sr ...
- java mail邮件发送(带附件) 支持SSL
java mail邮件发送(带附件)有三个类 MailSenderInfo.java package mail; import java.util.Properties; import java.ut ...
- SpringBoot 发送邮件和附件
作者:yizhiwaz 链接:www.jianshu.com/p/5eb000544dd7 源码:https://github.com/yizhiwazi/springboot-socks 其他文章: ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- JAVA GUI
JAVA GUI中的事件处理: 委托事件模型:事件源对象和监听器对象具有绑定关系 一个监听器可以绑定多个事件源 一个事件源也可以绑定多个监听器 监听器有各自监听的事件类型 设置容器的布局管 ...
- paip.java gui swt/jface 最佳实践
paip.java gui swt/jface 最佳实践 1. 工具:Eclipse +jigloo4 1 2. 安装插件: 1 1. IMPORT swt lib 2 2. 新建立窗体 2 3. 运 ...
- 写在学习Java GUI之前
Java GUI就是用Java语言开发桌面应用,而Java又有三个Java GUI库,分别为AWT,Swing和SWT/JFace. 现在要学的是Swing库. 后记:开发桌面应用,不止一种技术,现在 ...
随机推荐
- Linux如何查看端口占用情况
Linux如何查看端口 1.lsof -i:端口号 用于查看某一端口的占用情况,比如查看8000端口使用情况,lsof -i:8000 # lsof -i:8000 COMMAND PID USER ...
- 开发时Blocks跟Delegates如何选择----董鑫
1.大多数delegate protocols 都拥有几个消息源. 以GKMatch为例(A GKMatch object provides a peer-to-peer network betwee ...
- 直播流媒体ums
准备工具 下载 UltrantMediaServer服务器 FlashMediaLiveEncoder测试直播工具 第一步 安装 UltrantMediaServer服务器 第二步 打开网也输入 ...
- WebLogic11g- 集群化
其实网上关于weblogic集群的资料非常多[大部分都是从创建新的domain开始,我这篇先介绍怎么样把原本普通的domain改造为集群环境],如果觉得不够,可以啃weblogic的官方文档.下面给几 ...
- push自定义动画
// // ViewController.m // ViewControllerAnimation // // Created by mac on 15/5/26. // Copyright ...
- 区区牛马蹉跎 ,不要向生活低下头 Linux的账号和管理
账户和管理权限 1.管理用户账号和组账号 2.管理目录和文件的属性 1.Linux基于用户身份对资源访问进行控制:用户账号(超级用户.普通用户.程序用户) 组账号(基本组.附加组).UID (用户标识 ...
- abp vnext 调试
在用Abp或者asp.net core 开发过程中,难免会遇到稀奇古怪的问题,需要对底层源代码进行调试,下面就教大家如何通过配置Visual Studio 2019来进行调试: 首先我们通过查看Abp ...
- 配置samba共享,实现/www目录共享
一.samba服务器 1.安装samba包 # yum -y install samba 2.创建用户组 # groupadd -r admins # useradd -s /sbin/nologin ...
- Selenium对应版本
下面是谷歌浏览器与chromedriver的版本对应关系,供参考: ChromeDriver v2.45 (2018-12-10)----------Supports Chrome v70-72Chr ...
- 帆软报表(finereport)根据提供的数据求出该日期所在的季度
根据当前日期求字段中日期的季度 Oracle数据库 select T1.INDEXCODE ,T1.CREATETIME ,CASE when T1.CREATETIME = (case when t ...