热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

分享给设置自定义邮箱发送工资条源码

分享给设置自定义邮箱发送工资条源码:1、SendEmail.javapackagecom.prochanges.mail;importjava.awt.Contai

分享给设置自定义邮箱发送工资条源码:

1、SendEmail.java

package com.prochanges.mail;

import java.awt.Container;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;

import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.filechooser.FileNameExtensionFilter;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

/**
 * @author CodeCracker
 */
@SuppressWarnings("serial")
public class SendEmail extends JFrame {
	private JTextField filePathTextField;
	private JButton openFileBtn;
	private JButton sendBtn;
	private JFileChooser jfc;
	private JScrollPane scrollPane;
	private JTextArea logTextArea;

	public SendEmail() {
		initComponents();
	}

	private void onClickOpenFileBtn(ActionEvent e) {
		jfc.showDialog(new JLabel(), "选择文件");
		File file = jfc.getSelectedFile();
		if (null != file) {
			if (file.isDirectory()) {
				showMsg("请选择文件...");
				// System.out.println("文件夹:" + file.getAbsolutePath());
			} else if (file.isFile()) {
				filePathTextField.setText(file.getAbsolutePath());
				// System.out.println("文件:" + file.getAbsolutePath());
			}

		}
	}

	private String getStringCellValue(HSSFCell cell) {
		String strCell = "";
		switch (cell.getCellType()) {
		case HSSFCell.CELL_TYPE_STRING:
			strCell = cell.getStringCellValue();
			break;
		case HSSFCell.CELL_TYPE_NUMERIC:
			strCell = String.valueOf(cell.getNumericCellValue());
			break;
		case HSSFCell.CELL_TYPE_BOOLEAN:
			strCell = String.valueOf(cell.getBooleanCellValue());
			break;
		case HSSFCell.CELL_TYPE_BLANK:
			strCell = "";
			break;
		default:
			strCell = "";
			break;
		}
		if (strCell.equals("") || strCell == null) {
			return "";
		}
		if (cell == null) {
			return "";
		}
		return strCell;
	}

	private Properties loadFile(String path) {
		Properties prop = null;
		try {
			BufferedInputStream inBuff = new BufferedInputStream(new FileInputStream(path));
			prop = new Properties();
			if (path.endsWith(".xml"))
				prop.loadFromXML(inBuff);
			else
				prop.load(inBuff);
			inBuff.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return prop;
	}

	private MimeMessage createSimpleMail(Session session, String subject, String from, String to, String content) throws Exception {
		// 创建邮件对象
		MimeMessage message = new MimeMessage(session);
		// 指明邮件的发件人
		message.setFrom(new InternetAddress(from));
		// 指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
		message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
		// 邮件的标题
		message.setSubject(subject);
		// 邮件的文本内容
		message.setContent(content, "text/html;charset=UTF-8");
		// 返回创建好的邮件对象
		return message;
	}

	private boolean sendMsg(Transport ts, MimeMessage message) {
		try {
			ts.sendMessage(message, message.getAllRecipients());
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	private void onClickSendBtn(ActionEvent e) {
		HSSFWorkbook wb = null;
		try {
			wb = new HSSFWorkbook(new FileInputStream(filePathTextField.getText()));
			HSSFSheet sheet = wb.getSheetAt(0);
			int rowCt = sheet.getLastRowNum();
			if (rowCt > 1) {
				int colCt = sheet.getRow(rowCt - 1).getLastCellNum();
				String subject = sheet.getRow(0).getCell(0).getStringCellValue();
				StringBuffer sbHtml = new StringBuffer(
						"");
				sbHtml.append("
"); sbHtml.append(""); for (int j = 0; j "); sbHtml.append(columName); sbHtml.append(""); } sbHtml.append(""); Properties cOnfig= loadFile("config.xml"); String host = config.getProperty("host"); String from = config.getProperty("from"); String username = config.getProperty("username"); String password = config.getProperty("password"); int emailIdx = Integer.valueOf(config.getProperty("emailIdx")); int showIdx = Integer.valueOf(config.getProperty("showIdx")); Properties prop = new Properties(); prop.setProperty("mail.host", host); prop.setProperty("mail.transport.protocol", "smtp"); prop.setProperty("mail.smtp.auth", "true"); // 使用JavaMail发送邮件的5个步骤 // 1、创建session Session session = Session.getInstance(prop); // 开启Session的debug模式,这样就可以查看到程序发送Email的运行状态 //session.setDebug(true); // 2、通过session得到transport对象 Transport ts = session.getTransport(); // 3、使用邮箱的用户名和密码连上邮件服务器,发送邮件时,发件人需要提交邮箱的用户名和密码给smtp服务器,用户名和密码都通过验证之后才能够正常发送邮件给收件人。 ts.connect(host, username, password); // 4、创建邮件 for (int i = 2; i <= rowCt; i++) { StringBuffer cOntent= new StringBuffer(sbHtml.toString()); content.append(""); for (int j = 0; j "); content.append(columName); content.append(""); } content.append(""); content.append("
"); sbHtml.append(subject); sbHtml.append("
 "); String to = getStringCellValue(sheet.getRow(i).getCell(emailIdx)).trim(); // logTextArea.setText(logTextArea.getText()+"正在发送邮件...."+to+"\n"); MimeMessage message = new MimeMessage(session); // 指明邮件的发件人 message.setFrom(new InternetAddress(from)); // 指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发 message.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); // 邮件的标题 message.setSubject(subject); // 邮件的文本内容 Multipart mp = new MimeMultipart(); BodyPart bp = new MimeBodyPart(); bp.setContent("" + content, "text/html;charset=GBK"); mp.addBodyPart(bp); message.setContent(mp); String bfb = (i + 1 - 2) + "/" + (rowCt - 1); boolean isSuc = sendMsg(ts, message); String logMsg = ""; if (isSuc) { logMsg = getStringCellValue(sheet.getRow(i).getCell(showIdx)) + "\t工资条已经发送成功!【" + bfb + "】\n"; } else { logMsg = getStringCellValue(sheet.getRow(i).getCell(showIdx)) + "\t工资条已经发送失败!【" + bfb + "】\n"; } logTextArea.setText(logTextArea.getText() + logMsg); } ts.close(); } else { showMsg("没有读到数据!!!"); } } catch (Exception e1) { e1.printStackTrace(); } } private void showMsg(String msg) { JOptionPane.showMessageDialog(null, msg, "温馨提示", JOptionPane.PLAIN_MESSAGE); } private void initComponents() { filePathTextField = new JTextField(); openFileBtn = new JButton(); sendBtn = new JButton(); jfc = new JFileChooser(); scrollPane = new JScrollPane(); logTextArea = new JTextArea(); jfc.setFileSelectionMode(JFileChooser.FILES_ONLY); jfc.setAcceptAllFileFilterUsed(false); FileNameExtensionFilter filter = new FileNameExtensionFilter("Excel 97-2003 工作簿(*.xls)", "xls"); jfc.setFileFilter(filter); filePathTextField.setEnabled(false); logTextArea.setEditable(false); // jfc.addChoosableFileFilter(); // ======== this ======== Container cOntentPane= getContentPane(); contentPane.setLayout(null); contentPane.add(filePathTextField); filePathTextField.setBounds(25, 25, 277, 23); // --scrollPane { scrollPane.setViewportView(logTextArea); } contentPane.add(scrollPane); scrollPane.setBounds(25, 65, 435, 200); // ---- button1 ---- openFileBtn.setText("选择文件"); contentPane.add(openFileBtn); openFileBtn.setBounds(new Rectangle(new Point(307, 22), openFileBtn.getPreferredSize())); openFileBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { onClickOpenFileBtn(e); } }); sendBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (filePathTextField.getText().toString().equals("")) { showMsg("请选择Excel文件"); return ; } File temp=new File(filePathTextField.getText().toString()); if (!temp.isFile()) { showMsg("你选择的不是个文件"); return ; } if (!temp.exists()) { showMsg("你选择文件不存在"); return ; } sendBtn.setEnabled(false); logTextArea.setText(""); onClickSendBtn(e); sendBtn.setEnabled(true); } }); // ---- button2 ---- sendBtn.setText("发送"); contentPane.add(sendBtn); sendBtn.setBounds(new Rectangle(new Point(400, 22), sendBtn.getPreferredSize())); { Dimension preferredSize = new Dimension(); for (int i = 0; i


2、Entrance.java

package com.prochanges.mail;

public class Entrance {
	public static void main(String[] args) {
		SendEmail ssForm = new SendEmail();
		ssForm.setVisible(true);
		ssForm.setSize(490, 320);
	}
}




推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
  • tcpdump 4.5.1 crash 深入分析
    tcpdump 4.5.1 crash 深入分析 ... [详细]
author-avatar
黯嘫吢碎1984rv
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有