email 发送接口

5 篇文章 0 订阅
2 篇文章 0 订阅

企业邮件发送有自己的发送平台,其它系统包括业务系统常常将发送邮件的任务交给该平台。

该平台通过activemq 建立 queue 接受外围系统的发来的报文格式。

报文格式如下:

"[{\"sys\":\"fssc\", \"key\":\"QWESAD456\", \"type\":\"1\", \"email\":\"ysen@xxxx.com\", \"telno\":\"13601942660\", \"pernr\":\"\", \"subject\":\"mysubject\", \"body\":\"xxx,您好!<br>截至今日xx点,您还有xxx条待办事项尚未及时处理,<br>其中紧急事项xxx条,请通过以下链接进入系统--“我的待办”页面,尽快处理。谢谢!此邮件通过系统自动发送,请勿直接回复。如您已经处理,请忽略本邮件。<br>mm/dd/yyyy\", \"aux\":\"020910\"}]";

sys 对应的外围系统名字

type 对应的是发送方式1.email,2 .短信

key 对应的是密码

 

服务端对这段报文格式先做校验,再做业务处理

客户端需要根据不同的业务制定不同的模板,业务包括body里面的xxx业务数据。

 

这是业务bo,不同的email模板对应不同的msg对象

 

import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class SendAMQBO {
	private String user = ActiveMQConnection.DEFAULT_USER;
	private String password = ActiveMQConnection.DEFAULT_PASSWORD;
	private String url = "failover://tcp://10.111.11.111:61616";
	private Destination destination;

	public static void main(String[] args) {
		SimpleSendAMQ mySend = new SimpleSendAMQ();
		mySend.sendMessage();
	}

	void sendMessage(Object msg ) {
		try {
			Connection connection = null;
			ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
					user, password, url);
			connection = connectionFactory.createConnection();
			connection.start();
			Session session = connection.createSession(false,
					Session.AUTO_ACKNOWLEDGE);
			destination = session.createQueue("unsQueue");
			MessageProducer producer = session.createProducer(destination);
			producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
			TextMessage message = session.createTextMessage();
			message.setText(msg.toString());
			producer.send(message);

			connection.close();

		} catch (Exception ex) {
			System.out.println(ex.getMessage());
		}
	}
}

 

 

 

 

 

 

 

msg对象需要一个父类需要对报文格式作json化,包括freemarker加载body模板

import java.io.IOException;
import java.io.StringWriter;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.util.PropertyFilter;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public abstract class EmailTemplate {

	private String sys = "fssc";
	private String key = "QWESAD456";
	private String type = "1";
	private String email = " ";
	private String telno;
	private String pernr;
	private String subject;
	protected String body;
	private String aux;
	protected String templateName = "";
	public static Configuration conf = new Configuration();
	public JsonConfig config = new JsonConfig();

	static {
		conf.setClassForTemplateLoading(EmailTemplate.class, "/templates/");
	}

	public String getSubject() {
		return subject;
	}

	public void setSubject(String subject) {
		this.subject = subject;
	}

	public String getSys() {
		return sys;
	}

	public void setSys(String sys) {
		this.sys = sys;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getPernr() {

		return pernr;
	}

	public void setPernr(String pernr) {
		this.pernr = pernr;
	}

	public String getKey() {
		return key;
	}

	public void setKey(String key) {
		this.key = key;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getAux() {
		return aux;
	}

	public void setAux(String aux) {
		this.aux = aux;
	}

	public String getTelno() {
		return telno;
	}

	public void setTelno(String telno) {
		this.telno = telno;
	}

	public String toString() {
		 
		return JSONObject.fromObject(this, config()).toString();
	}

	public void setBody(String body) {
		this.body = body;
	}

	protected JsonConfig config() {

		config.setJsonPropertyFilter(new PropertyFilter() {
			public boolean apply(Object object, String name, Object value) {
				Field[] fields = object.getClass().getDeclaredFields();

				for (int i = 0; i < fields.length; i++) {
					if (name.equals(fields[i].getName())) {
						return true;
					}
				}
				
				if (name.equals("templateName")) {
					return true;
				}
				
				return false;

			}

		});
		return config;
	}

	public String setFrBody() {
		try {
			if(null==templateName||"".equals(templateName)){
				templateName = this.getClass().getName()+".ftl";
			}
			
			Template t = conf.getTemplate(templateName, "UTF-8");
			Map<String, Object> root = new HashMap<String, Object>();
			root.put("taskEmail", this);
			StringWriter sw = new StringWriter();
			try {
				t.process(root, sw);
				return sw.toString();

			} catch (TemplateException e) {
				e.printStackTrace();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return body;
	}

	public String getBody() {
 
		body = this.setFrBody();

		return body;
	}

	public String getTemplateName() {
		return templateName;
	}

	public void setTemplateName(String templateName) {
		this.templateName = templateName;
	}


}

 

 

 

 

 

 

具体业务对象 包含的业务属性不需要做json化,因为它们是包含在body里面的业务数据

 

 

public class TaskEmail extends EmailTemplate {

	/**
	 * body contect
	 */

	private String numTask = "2";
	private String urgentTask = "2";
	private String time = "9";

	 
	public static void main(String[] args) {

		TaskEmail taskEmail = new TaskEmail();
		//taskEmail.setTemplateName("TaskEmail.ftl");

		System.out.println(taskEmail.toString());

	}

	public String getNumTask() {
		return numTask;
	}

	public void setNumTask(String numTask) {
		this.numTask = numTask;
	}

	public String getUrgentTask() {
		return urgentTask;
	}

	public void setUrgentTask(String urgentTask) {
		this.urgentTask = urgentTask;
	}

	public String getTime() {
		return time;
	}

	public void setTime(String time) {
		this.time = time;
	}
	 
}

 

 

 

对应的TaskEmail.ftl

截至今日${taskEmail.time?if_exists}点,您还有${taskEmail.numTask?if_exists}条待办事项尚未及时处理,其中紧急事项${taskEmail.urgentTask?if_exists}条,<br>请通过以下链接进入系统--“我的待办”页面,尽快处理。谢谢!

 

 

 所以添加新的email发送业务只需要添加客户提供的email模板以及包含简单的body属性的对象即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot提供了简单且强大的邮件发送接口开发功能。你可以使用Spring Boot的JavaMailSender接口发送邮件。下面是一个简单的示例代码: 1. 首先,确保在你的项目中添加了Spring Boot的邮件依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> ``` 2. 在application.properties(或application.yml)文件中配置邮件服务器的相关信息,例如: ```properties spring.mail.host=your-smtp-server spring.mail.port=your-smtp-port spring.mail.username=your-username spring.mail.password=your-password ``` 3. 创建一个邮件发送服务类,例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Service; @Service public class EmailService { @Autowired private JavaMailSender mailSender; public void sendEmail(String to, String subject, String text) { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(to); message.setSubject(subject); message.setText(text); mailSender.send(message); } } ``` 4. 在需要发送邮件的地方调用邮件发送服务类的sendEmail方法,例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class EmailController { @Autowired private EmailService emailService; @GetMapping("/sendEmail") public String sendEmail() { String to = "recipient@example.com"; String subject = "Test Email"; String text = "This is a test email."; emailService.sendEmail(to, subject, text); return "Email sent successfully."; } } ``` 这样,当你访问`/sendEmail`接口时,就会发送一封测试邮件到指定的收件人邮箱。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值