实现代码:

注意点:

  • 需要的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. axios 之cancelToken原理以及使用

    看axios文档的时候发现cancelToken这个东东,这个是用来取消ajax请求的,一般原生的话用的是abort()这个方法.看到这玩意的第一感觉是用起来有点麻烦,但是看了内部实现,发现还是比较有 ...

  2. android中listView下拉刷新

    Android的ListView是应用最广的一个组件,功能强大,扩展性灵活(不局限于ListView本身一个类),前面的文章有介绍分组,拖拽,3D立体,游标,圆角,而今天我们要介绍的是另外一个扩展Li ...

  3. C++输入多行数据

    动机 编程题常用需求,比如输入两行数据. 解决思路:使用getline 程序 #include <iostream> #include <vector> #include &l ...

  4. LeetCode随缘刷题之回文数

    package leetcode.day_01_30; /** * 给你一个整数 x ,如果 x 是一个回文整数,返回 true :否则,返回 false . * <p> * 回文数是指正 ...

  5. windows gdi+ Bitmap 总结

    windows gdi+ 是对 windows gdi 的一个c++封装,同时增加了一些扩展功能,如反走样,样条曲线,变换矩阵,图像编解码等. gdi+ 相对于 gdi 也存在一些不足之处,如 执行效 ...

  6. Solution -「CF 156D」Clues

    \(\mathcal{Description}\)   link.   给一个 \(n\) 个点 \(m\) 条边的无向图 \(G\).设图上有 \(k\) 个连通块,求出添加 \(k-1\) 条边使 ...

  7. 「微前端实践」使用Vue+qiankun微前端方案重构老项目的本地验证

    10月份换了新的工作,参与完一个月的需求迭代后,接到了项目重构的任务.简单来说,需要在短时间内提出方案设想,同时进行本地验证,最终需要拿出一套技术替换方案来.于是,埋头苦干了一个月,总算干了点成绩出来 ...

  8. 【摸鱼神器】基于SSM风格的Java源代码生成器 单表生成 一对一、一对多、多对多连接查询生成

    一.序言 UCode Cms 是一款Maven版的Java源代码生成器,是快速构建项目的利器.代码生成器模块属于可拆卸模块,即按需引入.代码生成器生成SSM(Spring.SpringBoot.Myb ...

  9. C# 实例解释面向对象编程中的里氏替换原则

    在面向对象编程中,SOLID 是五个设计原则的首字母缩写,旨在使软件设计更易于理解.灵活和可维护.这些原则是由美国软件工程师和讲师罗伯特·C·马丁(Robert Cecil Martin)提出的许多原 ...

  10. Python实例:贪吃蛇(简单贪吃蛇编写)🐍

    d=====( ̄▽ ̄*)b 叮~ Python -- 简易贪吃蛇实现 目录: 1.基本原理 2.需要学习的库 3.代码实现 1.基本原理 基本贪吃蛇所需要的东西其实很少,只需要有一块让蛇动的屏幕, 在 ...