实现代码:

注意点:

  • 需要的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. C++ XML解析之TinyXML

    转载请注明来源:https://www.cnblogs.com/hookjc/ 使用TinyXML进行C++ XML解析,感觉使用起来比较简单,很容易上手,本文给出一个使用TinyXML进行XML解析 ...

  2. 纯JS脚本发送HTTP请求

    1 var xmlHttp; 2 var iii = 0; 3 if (window.XMLHttpRequest) { 4 xmlHttp = new XMLHttpRequest(); 5 if ...

  3. shell基础——数组

    定义数组 #小括号,空格 arr=(v1 v2 v3) arr=(`ls`) 打印数组 echo ${arr[0]} #下标从0开始 echo ${arr[*]} #整个数组 echo ${arr[@ ...

  4. node 解决存储xss风险报告

    1. 安装 xss模块 npm install xss 2.在 Node.js 中使用 const xss = require("xss"); // 在项目的接口里面添加 let ...

  5. python解释器的安装以及解释器多版本共存

    版本介绍 python创始人:gukido(龟叔) python1.X 原始版本,几乎不用 python2.x 最高版本2.7(2020年之后不再维护) python3.x 最高版本3.9(一般用3. ...

  6. Solution -「LOCAL」画画图

    \(\mathcal{Description}\)   OurTeam.   给定一棵 \(n\) 个点的树形随机的带边权树,求所有含奇数条边的路径中位数之和.树形生成方式为随机取不连通两点连边直到全 ...

  7. Intellij IDEA出现java.lang.ClassNotFoundException: com.mysql.jdbc.Driver处理办法

    菜单-->File-->project structure-->Modules-->Dependencies-->添加MySQL的驱动包:mysql-connector- ...

  8. JMM之synchronized关键字

    对于通讯,涉及两个关键字volatile和synchronized: Java支持多个线程同时访问一个对象或者对象的成员变量,由于每个线程可以拥有这个变量的拷贝(虽然对象及其成员变量分配的内存实在共享 ...

  9. JAVA8学习——Stream底层的实现二(学习过程)

    继续深入Stream的底层实现过程 2.spliterator() 接上 https://www.cnblogs.com/bigbaby/p/12159495.html 我们这次回到最开始源码分析的地 ...

  10. 「Python实用秘技06」逐行监听Python程序的内存消耗

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第6期 ...