Java邮件发送

本文介绍了一种使用Java实现的简单邮件发送方法,包括文本邮件发送的实现方式。文中提供了完整的代码示例,涉及邮件信息配置、认证过程及邮件发送等环节。
Java邮件发送,下面的是简单的邮件发送代码,邮件服务器配置在mailServer.properties文件里面。通过简单的文本邮件发送方式发送邮件,暂未使用html格式的邮件发送方式。
javax.mail.jar下载地址:http://www.oracle.com/technetwork/java/javamail/index.html

注:常用发送邮件服务器名称及端口
163 smtp.163.com 25
126 smtp.126.com 25
qq smtp.qq.com 25 //注:若提示“发送邮件错误 454 Authentication failed, please open smtp flag first! ”,在QQ邮箱的设置里面,找到账户-》POP3/IMAP/SMTP选择开启POP3/SMTP服务
139 smtp.139.com或smtp.10086.cn 25 //注:454 Authentication failed

mailServer.properties属性文件代码如下:

mailServerHost=smtp.163.com
mailServerPort=25
authValidate=true
userName=test@163.com
userPassword= testtest
fromAddress=test@163.com
fromUserName=\u663E\u793A\u6211\u54C8\u54C8
上面几个参数是邮件服务器的配置文件,mailServerHost 为 发送邮件的服务器的IP,mailServerPort 为 发送邮件的服务器端口,userName 为  登陆邮件发送服务器的用户名,userPassword 为  登陆邮件发送服务器的密码,fromAddress 为 邮件发送者的地址,fromUserName 为  邮件发送者的名称即显示在他人邮件的发件人,authValidate 为  是否需要身份验证。

MailInfo.java代码如下,主要定义邮件基本信息:

package com.hsinghsu.test;

import java.util.Properties;

/**
 * 邮件信息类
 * @author HsingHsu
 *
 */
public class MailInfo {
	private String mailServerHost; // 发送邮件的服务器的IP
	private String mailServerPort = "25"; // 发送邮件的服务器端口
	private String userName; // 登陆邮件发送服务器的用户名
	private String userPassword; // 登陆邮件发送服务器的密码
	private String fromAddress; // 邮件发送者的地址
	private String toAddress; // 邮件接收者的地址
	private String fromUserName; // 邮件发送者的名称,显示在他人邮件的发件人
	private String mailSubject; // 邮件主题
	private String mailContent; // 邮件的文本内容
	private boolean authValidate = false; // 是否需要身份验证
	private Properties properties; // 邮件会话属性

	public String getMailServerHost() {
		return mailServerHost;
	}

	public void setMailServerHost(String mailServerHost) {
		this.mailServerHost = mailServerHost;
	}

	public String getMailServerPort() {
		return mailServerPort;
	}

	public void setMailServerPort(String mailServerPort) {
		this.mailServerPort = mailServerPort;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getUserPassword() {
		return userPassword;
	}

	public void setUserPassword(String userPassword) {
		this.userPassword = userPassword;
	}

	public String getFromAddress() {
		return fromAddress;
	}

	public void setFromAddress(String fromAddress) {
		this.fromAddress = fromAddress;
	}

	public String getToAddress() {
		return toAddress;
	}

	public void setToAddress(String toAddress) {
		this.toAddress = toAddress;
	}

	public String getMailSubject() {
		return mailSubject;
	}

	public void setMailSubject(String mailSubject) {
		this.mailSubject = mailSubject;
	}

	public String getMailContent() {
		return mailContent;
	}

	public void setMailContent(String mailContent) {
		this.mailContent = mailContent;
	}
	
	public String getFromUserName() {
		return fromUserName;
	}

	public void setFromUserName(String fromUserName) {
		this.fromUserName = fromUserName;
	}

	public boolean isAuthValidate() {
		return authValidate;
	}

	public void setAuthValidate(boolean authValidate) {
		this.authValidate = authValidate;
	}

	public Properties getProperties() {
		Properties p = new Properties();
		p.put("mail.smtp.host", this.mailServerHost);
		p.put("mail.smtp.port", this.mailServerPort);
		p.put("mail.smtp.auth", authValidate ? "true" : "false");
		return p;
	}

	public void setProperties(Properties properties) {
		this.properties = properties;
	}

}

MailAuthenticator.java代码如下,主要是服务器用户的认证:

package com.hsinghsu.test;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

/**
 * 用来进行服务器对用户的认证
 * @author HsingHsu
 *
 */
public class MailAuthenticator extends Authenticator {
	String userName;
	String userPassword;

	public MailAuthenticator() {
		super();
	}

	public MailAuthenticator(String user, String pwd) {
		super();
		userName = user;
		userPassword = pwd;
	}

	public PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(userName, userPassword);
	}

}
MailSender.java代码如下,主要用于邮件发送:
package com.hsinghsu.test;

import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
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;

/**
 * 发送邮件
 * @author HsingHsu
 *
 */
public class MailSender {
	
	//发送邮件[邮件内容为文本格式]
	public boolean sendMail(MailInfo mailInfo) {
		// 判断是否需要身份认证
		MailAuthenticator authenticator = null;
		Properties pro = mailInfo.getProperties();
		if (mailInfo.isAuthValidate()) {
			// 如果需要身份认证,则创建一个密码验证器
			authenticator = new MailAuthenticator(mailInfo.getUserName(),
					mailInfo.getUserPassword());
		}
		// 根据邮件会话属性和密码验证器构造一个发送邮件的session
		Session sendMailSession = Session
				.getDefaultInstance(pro, authenticator);
		try {
			Message mailMessage = new MimeMessage(sendMailSession); // 根据session创建一个邮件消息
			Address from = new InternetAddress(mailInfo.getFromAddress(),mailInfo.getFromUserName()); // 创建邮件发送者地址
			Address to = new InternetAddress(mailInfo.getToAddress()); // 创建邮件的接收者地址,并设置到邮件消息中
			mailMessage.setFrom(from); // 设置邮件消息的发送者
			mailMessage.setRecipient(Message.RecipientType.TO, to);
			mailMessage.setSubject(mailInfo.getMailSubject()); // 设置邮件消息的主题
			mailMessage.setSentDate(new Date()); // 设置邮件消息发送的时间
			mailMessage.setText(mailInfo.getMailContent());// 设置邮件消息的主要内容

			Transport.send(mailMessage); // 发送邮件
			System.out.println("send ok!");
			return true;
		} catch (MessagingException ex) {
			ex.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return false;
	}
    //邮件内容为html格式
    public static boolean sendHtmlMail(MailInfo mailInfo) {
		// 判断是否需要身份认证
		MailAuthenticator authenticator = null;
		Properties pro = mailInfo.getProperties();
		// 如果需要身份认证,则创建一个密码验证器
		if (mailInfo.isAuthValidate()) {
			authenticator = new MailAuthenticator(mailInfo.getUserName(),
					mailInfo.getUserPassword());
		}
		// 根据邮件会话属性和密码验证器构造一个发送邮件的session
		Session sendMailSession = Session
				.getDefaultInstance(pro, authenticator);
		try {

			Message mailMessage = new MimeMessage(sendMailSession);// 根据session创建一个邮件消息
			Address from = new InternetAddress(mailInfo.getFromAddress());// 创建邮件发送者地址
			mailMessage.setFrom(from);// 设置邮件消息的发送者
			Address to = new InternetAddress(mailInfo.getToAddress());// 创建邮件的接收者地址,并设置到邮件消息中
			mailMessage.setRecipient(Message.RecipientType.TO, to);// Message.RecipientType.TO属性表示接收者的类型为TO
			mailMessage.setSubject(mailInfo.getMailSubject());// 设置邮件消息的主题
			mailMessage.setSentDate(new Date());// 设置邮件消息发送的时间
			Multipart mainPart = new MimeMultipart();// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
			BodyPart html = new MimeBodyPart();// 创建一个包含HTML内容的MimeBodyPart
			html.setContent(mailInfo.getMailContent(),
					"text/html; charset=utf-8");// 设置HTML内容
			mainPart.addBodyPart(html);
			mailMessage.setContent(mainPart);// 将MiniMultipart对象设置为邮件内容
			Transport.send(mailMessage);// 发送邮件
			return true;
		} catch (MessagingException ex) {
			ex.printStackTrace();
		}
		return false;
	}
}
MailTest.java主要用于邮件发送测试:
package com.hsinghsu.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class MailTest {

	public static void main(String[] args) {
		
		//以下参数从properties文件读取
		String mailServerHost = null; // 发送邮件的服务器的IP
		String mailServerPort = null; // 发送邮件的服务器端口
		String userName = null; // 登陆邮件发送服务器的用户名
		String userPassword = null; // 登陆邮件发送服务器的密码
		String fromAddress = null; // 邮件发送者的地址
		String fromUserName = null; // 邮件发送者的名称,显示在他人邮件的发件人
		boolean authValidate = false; // 是否需要身份验证
		
		InputStream in = Object.class.getResourceAsStream("/mailServer.properties"); 
		Properties prop = new Properties();
		try {
			prop.load(in);
			mailServerHost = prop.getProperty("mailServerHost").trim();
			mailServerPort = prop.getProperty("mailServerPort").trim();
			userName = prop.getProperty("userName").trim();
			userPassword = prop.getProperty("userPassword").trim();
			fromAddress = prop.getProperty("fromAddress").trim();
			fromUserName = prop.getProperty("fromUserName").trim();
			authValidate = prop.getProperty("authValidate").trim().equalsIgnoreCase("true");
		} catch (IOException e) {
			System.out.println("读取邮箱服务配置文件出错");
			e.printStackTrace();
		} 
		
		MailInfo mailInfo = new MailInfo();
		mailInfo.setMailServerHost(mailServerHost);//"smtp.163.com"
		mailInfo.setMailServerPort(mailServerPort);//"25"
		mailInfo.setAuthValidate(authValidate);//true
		mailInfo.setUserName(userName);//"test@163.com"
		mailInfo.setUserPassword(userPassword);// "test"
		mailInfo.setFromAddress(fromAddress);//"test@163.com"
		mailInfo.setFromUserName(fromUserName);//"显示我哈哈"
		
		mailInfo.setToAddress("666666@qq.com");//666666@qq.com
		mailInfo.setMailSubject("邮件标题是这个");
		mailInfo.setMailContent("邮件内容是这个");
		// 这个类主要来发送邮件
		MailSender sms = new MailSender();
		sms.sendMail(mailInfo);// 发送文体格式
	}

}

内容概要:本文档围绕“经济学期刊论文复现:数字化转型能否促进企业的高质量发展”这一核心命题,系统整合了MATLAB与Python编程实现的大量科研案例,聚焦于数字化转型对企业全要素生产率(TFP)及高质量发展影响的实证研究。文档不仅复现了高水平经济学期刊论文中的计量经济模型,如基于中国上市公司数据的数字化转型与生产率关系分析,还深度融合了工程领域的建模技术,涵盖微电网优化、负荷预测、风电光伏不确定性建模、电力系统故障仿真等。同时,提供了智能优化算法(如遗传算法、粒子群优化)、机器学习(LSTM、CNN-BiGRU-Attention)、信号处理、路径规划等多学科交叉的技术资源,构建了一个从理论推导到代码实现的完整科研支持体系,旨在帮助研究者系统掌握论文复现与实证分析的核心方法。; 适合人群:具备一定MATLAB或Python编程基础,从事经济学、管理学、能源系统、智能制造及相关交叉学科研究的研究生、科研人员及高校教师。; 使用场景及目标:①复现经济学顶刊中关于数字化转型与企业高质量发展的实证模型;②学习如何量化数字化转型并构建其对企业绩效的影响评估框架;③掌握基于真实数据的计量经济建模、场景生成与优化调度仿真技术,全面提升科研论文写作与实证研究能力。; 阅读建议:建议读者结合文中提供的代码与数据资源,重点研读“论文复现”与“创新未发表”模块,按照技术路径循序渐进地实现模型复现与拓展。推荐关注“荔枝科研社”公众号及百度网盘链接获取完整资料,系统性地开展学习与科研实践。
下载代码方式:https://pan.quark.cn/s/9de6a9d0b3d8 依据所提供的文件内容,能够推导出此段程序的核心任务在于对一个任意的三位数进行拆解,并且分别呈现该数值的百位、十位及个位部分。随后,我们将对该知识点进行进一步的深入研究。 ### 一、程序功能说明 #### 1. 接收任意一个三位数输入 程序起始阶段运用`scanf`函数来获取用户输入的一个整数。为确保输入内容确实为一个三位数,在实际应用场景中通常需要嵌入验证机制来保障输入的有效性。然而,在本示例情形下,该环节被简化处理,预设用户总会准确输入一个三位数。 #### 2. 实施数字的拆分并提取各位置数值 程序借助一系列数学计算来对三位数进行拆分,将其转化为百位、十位和个位三个独立的构成部分。具体而言,通过除法和取模运算完成了这一过程。 #### 3. 展示各位置上的数值 程序运用`printf`函数来输出原始数值以及各个位上的数值。需要留意的是,代码中的输出部分似乎存在一些混淆,存在语法上的错误,例如多余的`printf`语句和乱码字符等问题。 ### 二、核心代码分析 #### 1. 数字拆分逻辑 ```c a[0] = n / 1000; // 提取千位数,但鉴于题目要求是三位数,此处应为百位数 a[1] = n % 1000 / 100; // 提取百位数 a[2] = n % 1000 % 100 / 10; // 提取十位数 a[3] = n % 1000 % 100 % 10; // 提取个位数 ``` 这段代码通过一连串的除法和取模运算,成功地将输入的数字n拆分为百位、十位和个位三个独立的构成部分,...
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值