首页 > 编程语言 >Java 实现邮件发送

Java 实现邮件发送

时间:2023-09-26 21:34:26浏览次数:40  
标签:Java String http private 发送 new import 邮件 emailInfo

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.codehaus.jettison.json.JSONObject;

import java.io.IOException;
import java.net.URLEncoder;

public class Main {
    public static void main(String[] args) {
        // 接收邮件的人
    	String eamilTo = "[email protected], [email protected]"; // 需要填写多个人用逗号分开
    	// 邮件抄送
    	String emailCs = ""; // 需要填写多个人用逗号分开

		// 文件路径
		String filePath = "http://your_server_url";
		
		// 发送邮件
		sendEmail(emailTo, eamilCss, filePath);
    }
	
	private static void sendEmail(String emailTo, String emailCs, String outputFile){
		 String emailApiUrl = "http://example.com/api"; // 替换为实际的API地址
		 CloseableHttpClient httpClient = HttpClients.createDefault();
		 HttpPost post = new HttpPost(emailApiUrl);
		 String[] sendEmailTo = emailTo.split(",");
		 String[] sendEmailCcs = emailCs.split(",");
         String filePath = outputFile + ".zip";
     
 		 
		 String responseContent = null;
		 CloseableHttpResponse response = null;

         try {
         		// 构建JSONObject对象
				JSONObject jsonObject = new JSONObject();
				jsonObject.put("subject","测试邮件");
				jsonObject.put("text","这是一封测试邮件");
				jsonObject.put("to", sendEmailTo);
				jsonObject.put("ccs",sendEmailCcs);
				jsonObject.put("filepath",filePath);
				jsonObject.put("filepathType","test");
				jsonObject.put("status","End");
				
				post.setHeader("Content-Type","application/json");
		 		post.setEntity(new StringEntity(data, "UTF-8"));

 				response = client.execute();
 				if(response.getStatusLine().getStatusCode() == 200) {
					HttpEntity entity = response.getEntity();
					responseContent = EntityUtils.toString(entity, "UTF-8");
				}
		 } catch (Exception e) {
		 	e.printStackTrace();
		 }
	}

}

后端实体类 EmailInfo.java

@Data
@NoArgsConstructor
public class EmailInfo {
	// 主题(标题)
	private String subject;

    // 正文
    private String text;

   // 抄送人
   private String[] ccs;

   // 收件人
   private String[] to;

   // 附件路径
   private String filepath;

   // 附件路径类型
   private String filepathType;

   // 任务状态
   private String status;
}

核心代码

public void sendEmail(EmailInfo emailInfo) {
	Date date = new Date();
	if(Contant.END.equals(emailInfo.getStatus())) {
			try {
			 		MimeMessage mimeMessage = javaMailSender.createMimeMessage();
			 		MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
			 		mimeMessageHelper .setFrom(from); 
			 		mimeMessageHelper .setTo(emailInfo.getTo());
			 		mimeMessageHelper.setSubject(simpleDateFormat.format(date) + " " + emailInfo.getSubject());
			 		mimeMessageHelper.setText(emailInfo.getText(), true);
			 		if(emailInfo.getCss() != null) {
						mimeMessageHelper.setCss(emailInfo.getCss());
					}
					if(emailInfo.getFilePath() != null) {
						String[] subStrings = emailInfo.getFilePath().split(",");
						int numCommas = subStrings.length - 1;
						for(int i = 0; i <= numCommas; i++) {
							addAttachment(subStrings[i], emailInfo.getFilepathType(), mimeMessageHelper);
						}
					}
					javaMailSender.send(mimeMessageHelper.getMimeMessage());
            } catch (MessageException messagingException) {
				log.error("邮件发送失败:" + messagingException.getMessage());
			} catch (IOException e) {
				log.error(e.getMessage());
				throw new RuntimeException(e);
			}
     }

}

inputStream 转 file 方法

private void inputStramFile(InputStram is, File file) throws IOException{
	try (FileOutputStream outputStream = new FileoutputStream(file)) {
		byte[] buffer = new byte[4096];
		int bytesRead;
		while ((bytesRead = is,read(buffer) != -1)){
			outputStream.write(buffer, 0, bytesRead);
		}
		outputStream.close();
		is.close();
	}

}

添加附件方法

private void addAttachement(String filePath, String filePathType, MimeMessageHelper mimeMessageHelper) throws IOException, MessageException {
	URL url = new URL(downloadUrl + filePaht + "&type=" + filePathType);
	HttpURLConnection conn = (HttpURLConnection) url.openConnection();
	InputStram inputStream = conn.getInputStream();
	Path uploadDir = Paths.get(targetFolder).toAbsolutePath().normalize();
	FIle targetFile = new File(uploadDir.toString(), filePath.substring(filePaht.lastIndexOf("/") + 1));
	inputStreamFile(inputStream, targetFile);
	mimeMessageHelper.addAttachment(filePath.substring(filePaht.lastIndexOf("/") + 1), targetFile);
	
}

一点困惑:

在HTTP的POST请求中,无法直接识别JSONObject对象中的中文文件路径。这是因为HTTP协议规定,在发送请求时,URL和请求头中只能包含ASCII字符,而不能包含非ASCII字符(如中文字符)或特殊字符。

如果需要传递中文文件路径,可以考虑对中文文件路径进行编码,然后将编码后的路径作为参数传递给服务器端。常用的编码方式有URL编码(Percent-encoding),可以使用Java中的URLEncoder类对中文进行编码。

例如,将中文文件路径 "/路径/文件.txt" 进行URL编码,可以得到 "%2F%E8%B7%AF%E5%BE%84%2F%E6%96%87%E4%BB%B6.txt" ,然后将编码后的路径作为参数通过POST请求提交给服务器端。

在服务器端接收到请求后,需要对收到的URL参数进行解码,可以使用Java中的URLDecoder类对URL进行解码,还原为原始的中文文件路径。

请注意,保证服务器端和客户端的编解码方式一致,以免发生乱码或路径错误的情况。



标签:Java,String,http,private,发送,new,import,邮件,emailInfo
From: https://blog.51cto.com/u_16281798/7614568

相关文章

  • 无涯教程-JavaScript - T.DIST.2T函数
    描述T.INV.2T函数返回学生t分布的两尾逆。语法T.INV.2T(probability,deg_freedom)争论Argument描述Required/OptionalProbabilityTheprobabilityassociatedwiththeStudent'stdistribution.RequiredDeg_freedomAnintegerindicatingthenumberofdegrees......
  • IDEA中的java代码Getters和Setters报红问题解决办法【杭州多测师_王sir】
    今天在新的编辑器中导入新项目时,发现很多get、set、toString的相关方法全部报红,仔细排查发现,原来是bean中注解采用lombok来自动生成get、set、toStirng、equals等方法,而新的编辑器未安装lombok plugin,所以全部报红。Lombok简介项目中经常使用bean,entity等类,绝大部分数据类类中都......
  • 无涯教程-JavaScript - T.DIST函数
    描述T.DIST.2T函数返回两尾学生的t分布。学生的分布用于小样本数据集的假设检验。使用此函数代替t分布的临界值表。语法T.DIST(x,deg_freedom,cumulative)争论Argument描述Required/OptionalXThenumericvalueatwhichtoevaluatethedistribution.RequiredDeg......
  • ios 识别emoji 表情 java数据库
    INSERTintoapp_emoji(code)VALUES('0x1F603'),('0x1F604'),('0x1F601'),('0x1F606'),('0x1F979'),('0x1F605'),('0x1F602'),('0x1F923'),('0x1F972'),('0x263A'),(&......
  • 按学号随机倒霉蛋(java)
    话不多说,直接上代码 importjava.util.Arrays;importjava.util.Random;importjava.util.Scanner;publicclassTimeBasedRandom{publicstaticvoidmain(String[]args){Boolean[]isTaken=newBoolean[62];Arrays.fill(isTaken,false);//......
  • 无涯教程-JavaScript - STDEVPA函数
    描述STDEVPA函数根据作为参数给出的总体(包括文本和逻辑值)计算标准偏差。语法STDEVPA(value1,[value2]...)争论Argument描述Required/OptionalValue11到255对应于总体的值。您也可以使用单个数组或对数组的引用,而不要使用以逗号分隔的参数。RequiredValue......
  • Redis之Java客户端连接
    Spring整合Redis使用Lettuce框架访问RedisprivatestaticRedisCommands<String,String>createRedisCommands(){RedisURI.Builderbuilder=RedisURI.Builder.redis("",6379);builder.withPassword("test123").withDatabase(1);Redis......
  • 无涯教程-JavaScript - STDEVA函数
    描述STDEVA函数根据样本估算标准偏差。标准偏差是对值与平均值(平均值)的分散程度的度量。语法STDEVA(value1,[value2]...)争论Argument描述Required/OptionalValue11至255个值,对应于总体样本。您也可以使用单个数组或对数组的引用,而不要使用以逗号分隔的参数......
  • 转!!java ssh远程服务器报错 解决方法 Key exchange was not finished, connection is c
    转自:https://blog.csdn.net/weixin_45266856/article/details/129754122是ssh中的key交换算法不兼容导致 ssh报错解决:vi/etc/ssh/sshd_configKexAlgorithmsdiffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-gro......
  • 用Java 开发 WebService Axis简单实例
    [code]本人的开发环境eclipse3.2,tomcat5.0.28,jdk1.4axis_1.4目前最新版这里主要讲一下webservice的一个开发过程,1.下载axis1.4最新版本http://apache.mirror.phpchina.com/ws/axis/1_4/2.将解压后的axis-1_4文件下的webapps目录下的axis目录考......