/**
*
* 类说明:邮件的数据结构类
*
* @author qiujy
* @version v1.0 2005-12-2
*/
public class EmailData {
String from = null; //发件人邮箱地址
String[] recipients = null; //收件人邮箱地址,可以多个
String subject = null; //邮件主题
String content = null; //邮件内容
String contentType = null; //邮件内容格式(文本或html)
String fileName = null; //附件文件名(目前只提供一个附件)
//下面是相应的setter/getter方法
/**
* @return 返回 content。
*/
public String getContent() {
return content;
}
/**
* @param content 设置邮件内容。
*/
public void setContent(String content) {
this.content = content;
}
/**
* @return 返回 contentType。
*/
public String getContentType() {
return contentType;
}
/**
* @param contentType 设置邮件内容格式(传入"text"或"html")。
*/
public void setContentType(String contentType) {
this.contentType = contentType;
}
/**
* @return 返回 fileName。
*/
public String getFileName() {
return fileName;
}
/**
* @param fileName 设置附件文件名(目前只能提供一个附件)。
*/
public void setFileName(String fileName) {
this.fileName = fileName;
}
/**
* @return 返回 from。
*/
public String getFrom() {
return from;
}
/**
* @param from 设置发件人。
*/
public void setFrom(String from) {
this.from = from;
}
/**
* @return 返回 recipients。
*/
public String[] getRecipients() {
return recipients;
}
/**
* @param recipients 设置收件人,可以多个。
*/
public void setRecipients(String[] recipients) {
this.recipients = recipients;
}
/**
* @return 返回 subject。
*/
public String getSubject() {
return subject;
}
/**
* @param subject 设置邮件主题。
*/
public void setSubject(String subject) {
this.subject = subject;
}
}
2.创建一个设置SMTPAuthenticator(继承自Authenticator),通过它设置用户名、密码,来访问受保护的资源,这里的资源一般指的是邮件服务器。
/**
* 类名: SMTPAuthenticator.java
* 作者: qiujy
* 版本: v1.0
* 创建日期 2005-12-2
* Copyright 2005-2006 qiujy All rights reserved.
*/
package com.xumh.common.util;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
public class SMTPAuthenticator extends Authenticator{
String username = null;
String password = null;
public SMTPAuthenticator(String username, String password){
this.username = username;
this.password = password;
}
protected PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(username, password);
}
}
3、发送邮件(包括文本格式和html两种格式)
/*
* 类名: PostEMail.java
* 作者: qiujy
* 版本: v1.0
* 创建日期 2005-12-2
*
* Copyright 2005-2006 qiujy All rights reserved.
*/
package com.xumh.common.util;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
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.mail.internet.MimeUtility;
public class PostEMail {
/**
*
* 方法说明:发送邮件(包括文本格式和html两种格式)
*
* @param emailData
* @throws MessagingException
* @throws Exception
*/
public static void sendMail(EmailData emailData) throws MessagingException,
Exception {
String from = emailData.getFrom();
String[] recipients = emailData.getRecipients();
String subject = emailData.getSubject();
String content = emailData.getContent();
String contentType = emailData.getContentType();
String fileName = emailData.getFileName();
if (recipients != null && recipients.length > 0) {
Properties props = new Properties();
// 设置邮件服务器地址,连接超时时限等信息
props.put("mail.smtp.host", "smtp.126.com"); //邮件服务器,需根据自己的邮箱地址来更改
props.put("mail.smtp.connectiontimeout", "10000"); //
props.put("mail.smtp.timeout", "10000"); //
props.put("mail.smtp.auth", "true");//需要验证
SMTPAuthenticator mailauth = new SMTPAuthenticator("你的用户名", "你的密码");
// 创建缺省的session对象
Session session = Session.getDefaultInstance(props, mailauth);
// 创建message对象
Message msg = new MimeMessage(session);
// 设置发件人和收件人
InternetAddress addressFrom = new InternetAddress(from);
msg.setFrom(addressFrom);
InternetAddress[] addressTo = new InternetAddress[recipients.length];
for (int i = 0; i < recipients.length; i++) {
addressTo[i] = new InternetAddress(recipients[i]);
}
// Message.RecipientType.TO 收件人
// Message.RecipientType.CC 抄送
// Message.RecipientType.BCC 暗送
msg.setRecipients(Message.RecipientType.TO, addressTo);
// 设置邮件标题,中文编码
subject = MimeUtility.encodeText(new String(subject.getBytes(),
"GB2312"), "GB2312", "B");
msg.setSubject(subject);
// 新建一个MimeMultipart对象用来存放BodyPart对象(事实上可以存放多个)
Multipart mmp = new MimeMultipart();
// 设置邮件内容,区分文本格式和HTML格式
if (contentType == null || contentType.equals("text")) {
msg.setText(content);
} else if (contentType.equals("html")) {
// 给消息对象设置内容
// 新建一个存放信件内容的BodyPart对象
BodyPart bodyPart1 = new MimeBodyPart();
// 给BodyPart对象设置内容和格式/编码方式
bodyPart1.setContent(content, "text/html;charset=gb2312");
// 将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart)
mmp.addBodyPart(bodyPart1);
}
// 设置邮件附件
if (fileName != null && !fileName.trim().equals("")) {
BodyPart bodyPart2 = new MimeBodyPart();
FileDataSource fileDataSource = new FileDataSource(fileName);
bodyPart2.setDataHandler(new DataHandler(fileDataSource));
// 需要对附件文件名称进行转码,不然会出现乱码
bodyPart2.setFileName(new String(fileName
.getBytes("GB2312"), "8859_1"));
mmp.addBodyPart(bodyPart2);
}
//把msg作为消息对象的内容
msg.setContent(mmp);
// 设置邮件发送时间
msg.setSentDate(new java.util.Date());
// 调用抽象类的静态方法send()发送邮件
Transport.send(msg);
}
}
public static void main(String[] args){
EmailData emailData = new EmailData();
emailData.setFrom("qiujiayong@126.com");// this is the from_email
emailData.setRecipients(new String[]{"20978405@163.com","qiujiayong@126.com"});
emailData.setSubject("邮件发送测试!");
emailData.setContent("你好,收到这封信表现程序运行正常。");
emailData.setContentType("text");
emailData.setFileName("我好.sql");
try {
PostEMail.sendMail(emailData);
} catch (MessagingException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (Exception e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}
相关推荐
下面是一个简单的使用`javax.mail`发送邮件的示例代码,这个例子涵盖了多收件人、多抄送人、多密送人和多附件的功能: ```java import javax.mail.*; import javax.mail.internet.*; import java.util.*; public ...
这是一个javax.mail.jar,你可以用它来发送邮件。
5. **发送邮件** 一旦邮件准备就绪,你可以使用 `Transport` 类的 `send()` 方法将其发送出去: ```java Transport.send(message); ``` 6. **实现自动回复** 要实现自动回复功能,你可以在接收到邮件时触发...
在使用JavaMail发送邮件前,需要配置邮件服务器的属性。这通常通过创建一个`Properties`对象实现,设置包括SMTP服务器地址、端口、用户名、密码等。例如: ```java Properties props = new Properties(); props....
安装步骤: 1.逍遥商城系统需要PHP+mysql运行环境,可以在windows或linux下运行,具体的php和mysql的版本没有特殊要求,兼容范围还是比较广的,推荐php5.6以上,mysql5.0以上。 2.把文件夹所有文件解压缩在站点目录中, 2.执行http://127.0.0.1/install/index.php进行安装 3.安装完成后,把install目录删掉。
wordpress可视化数据采集Scrapes插件,WP博客网站自动采集发布 支持 PHP7.4,PHP8.0 及以上不支持 上传插件到 wp-content/plugins 目录,然后解压 不需要写采集规则,傻瓜式操作,只需要对方的网址域名,在后台动动鼠标即可。
STM32F103使用NRF2401通过ACK响应双向通讯(HAL库) 简单的应用。
Libmodbus 是一个用于 Modbus 协议的开源库,提供了丰富的函数接口,可方便实现设备间的 Modbus 通信,支持多种平台,能轻松移植到不同系统中,有助于开发人员快速构建 Modbus 相关应用程序。我已编译好windows x86 版本的dll
内容概要:本文详细介绍了LabVIEW在汽车EPS转向器海纳传感器标定中的应用,重点探讨了如何通过LabVIEW解决传统标定方法中存在的数据采集实时性不足、标定过程缺乏自动化、数据分析难度大的问题。文中展示了具体的代码实现,包括数据采集、分析、校准和报告生成等功能模块,并通过实际案例展示了该系统的高效性和准确性。此外,文章还讨论了一些常见的调试问题及其解决方案,如通信握手逻辑、信号异常检测、温度补偿等。 适合人群:从事汽车电子、传感器标定及相关领域的工程师和技术人员。 使用场景及目标:适用于需要提高传感器标定效率和精度的企业和个人。目标是通过LabVIEW的应用,实现传感器标定的自动化和智能化,从而提升产品质量和生产效率。 其他说明:文章强调了LabVIEW在处理复杂标定任务中的灵活性和强大功能,提供了多个实用的技术细节和实践经验,对于希望深入了解LabVIEW在工业应用中的开发者非常有价值。
内容概要:本文深入探讨了Simulink If模块在嵌入式系统开发中的强大功能,特别是在汽车电子和工业自动化领域的应用。主要介绍了两种核心技术:一是DBC文件的自动导入生成模型及代码,二是硬件信号的导入生成模型及代码。DBC文件的自动导入能够快速构建CAN总线通信模型,简化信号解析和报文处理,生成的代码可以直接应用于AUTOSAR架构,实现ASW和BSW的无缝对接。硬件信号导入功能则允许开发者轻松地将硬件设备产生的信号集成到Simulink模型中,自动生成带有滤波和其他预处理功能的代码,适用于实时数据采集和控制算法实现。 适合人群:从事嵌入式系统开发、汽车电子、工业自动化等相关领域的工程师和技术人员。 使用场景及目标:① 快速搭建基于DBC文件的CAN总线通信模型,提高开发效率;② 实现硬件信号的实时处理和控制,优化数据采集和信号处理流程;③ 自动生成符合AUTOSAR标准的高质量代码,减少手动编码错误。 其他说明:文中提供了多个Matlab代码示例,展示了具体的操作步骤和生成代码的结构,帮助读者更好地理解和应用这些功能。同时,文中还分享了一些实用技巧,如DBC文件的功能模块拆分、硬件信号的时间戳对齐以及代码生成的优化设置等。
流变学仿真方法:流变学仿真参数设置.zip
内容概要:本文详细介绍了0-1背包问题的两种动态规划解法,包括二维DP数组和优化后的一维滚动DP数组方法。首先定义了最大物品数量和背包容量等常量,接着通过两个数组分别存储每个物品的重量和价值。文中给出的代码实现了完整的算法逻辑:初始化边界条件,迭代更新状态转移方程,最终计算出能够放入背包的最大价值。此外还提供了回溯功能,可以找出具体的最优解组合。为了提高空间效率,文章进一步解释了一维滚动数组的使用方法,并附有完整的C++代码实现。 适合人群:计算机科学专业学生或有一定编程基础、对算法设计与分析感兴趣的读者。 使用场景及目标:①学习经典的动态规划问题解决思路;②理解如何通过状态转移方程来优化复杂度;③掌握二维DP向一维DP转换的技术手段以节省内存开销。 阅读建议:建议读者先理解0-1背包问题的基本概念,再逐步深入研究两种不同的解法,注意对比两者之间的异同点,特别是空间复杂度方面的改进。同时可以通过修改输入数据来测试不同情况下的运行结果,加深对算法的理解。
该资源为natsort-3.0.0.tar.gz,欢迎下载使用哦!
内容概要:本文详细介绍了求解一维抛物热传导方程的各种经典数值方法,包括显式欧拉法、隐式欧拉法、Crank-Nicolson格式(即梯形公式)、二阶BDF格式以及不同的差分格式(如五点差分、九点差分和紧差分)。每种方法不仅给出了理论公式的推导,还提供了完整的MATLAB源码实现,并附有详细的代码解释和数值例子的数据图解分析。通过对不同方法的比较,展示了它们在稳定性和精度方面的优劣。 适合人群:具备一定数学和编程基础的学生、科研人员及工程师。 使用场景及目标:适用于需要解决热传导问题的研究项目,帮助使用者理解并选择合适的数值方法进行仿真计算,优化求解过程。 其他说明:文中强调了边界条件处理的重要性,并建议初学者从简单的Dirichlet边界条件入手练习。此外,还提到了一些常见的陷阱,如MATLAB矩阵索引与物理空间坐标的错位问题,提醒开发者注意这些问题以确保正确性。
一个人的经历信息和个人简介
内容概要:本文详细介绍了三菱FX3U PLC的圆弧插补程序,涵盖从中断扫描初始化、U型插补主程序、移动控制函数到急停复位程序的具体实现方法。通过具体的代码示例,展示了如何利用U型插补指令和服务调用来实现精确的圆弧轨迹控制。此外,文中还讨论了插补过程中的一些关键技术点,如中断优先级设置、插补结果存储、角度参数设置以及误差补偿等。同时,提供了关于脉冲输出、坐标计算和方向控制的实际操作技巧,强调了脉冲当量换算的重要性,并分享了一些调试经验和注意事项。 适合人群:从事工业自动化、运动控制领域的工程师和技术人员,特别是那些对PLC编程有一定基础并希望深入了解三菱FX3U PLC圆弧插补功能的人群。 使用场景及目标:适用于需要进行高精度圆弧轨迹控制的应用场景,如CNC控制系统、机器人运动控制等。目标是帮助读者掌握三菱FX3U PLC的圆弧插补编程技能,提高其在实际项目中的应用能力。 其他说明:文中提供的程序实例不仅有助于理解三菱FX3U PLC的工作原理,还能作为实际项目的参考模板。建议读者在实践中不断优化和完善相关程序,以适应不同的应用场景。
内容概要:本文详细介绍了在一个60吨/小时的反渗透+混床纯水项目中,如何利用西门子200 Smart PLC和Smart Line触摸屏进行系统设计与优化。主要内容涵盖硬件架构搭建(如CPU SR40、AI模块、TM模块)、模拟量处理(如电导率、压力、流量等信号的采集与转换)、数据滤波(如滑动平均值算法)、时钟同步(如自动和手动校准)、用户权限管理(如多级权限设置)、报警处理(如状态位轮询和异或运算)以及混床再生控制(如PID指令和状态机编程)。此外,还涉及了一些实用技巧,如数据追溯功能、报警弹窗中的应急处置指引、隐藏的debug模式等。 适合人群:从事工业自动化控制领域的工程师和技术人员,尤其是熟悉西门子PLC和触摸屏编程的人群。 使用场景及目标:适用于需要深入了解和掌握西门子200 Smart PLC在水处理项目中的具体应用和优化方法的专业人士。目标是提高系统稳定性、可靠性和易用性,确保水处理过程高效、精准地运行。 其他说明:文中提供了大量具体的程序代码片段和实践经验分享,对于实际项目实施具有很高的参考价值。同时,作者强调了细节处理的重要性,如模拟量的精确转换、报警系统的完善设计等,这些都是保障系统正常运行的关键因素。
找了一大圈终于找到了,有些e xing博主发的还有密码和要米,本资源真实可用
增压转换器和涡轮机的功率为1千瓦。它们适合风速高达12 m/s。涡轮机参考旋转速度150转/分
卷积神经网络(CNN)项目源码-基于CNN的行为姿态识别代码