AEM day cq mail service 发邮件
过程
- day cq mail service(OSGi)中进行配置,配置的是发件人
- 配置一个发件内容的template(就是对方将收到啥样的邮件)
- Java中用MessageGatewayService这个类来进行发邮件(虽然我不知道day cq mail service和他有什么必然的联系)
第一步
搞我半天,什么host name, server port我怎么知道!其实这两个内容要在网上搜索。一开始我用qq邮箱,垃圾
用gmail
- smtp.gmail.com
- 465
接着user和password都用自己gmail的账号密码
转载自Mail Server Set up in AEM using GMail
后面发现还是推荐用qq邮箱
- smtp.qq.com
- 465
- 去QQ账户设置中开启SMTP服务,会要求你发短信的,发完短信后就能拿到他给的密码
- 就不需要输入你的QQ账户密码了
因为不用他给的密码好像就很容易发邮件失败,不管是gmail的还是qq邮箱的。就是会偶尔可以发,偶尔不可以发。
用了他提供的专门密码以后就没问题。
第二步
配置template,随便在哪儿创建一个txt文件,最后路径是要在Java中引入的
在template中写${}是可以在Java进行配置赋值的。
也可以写html标签
以下是我的示例:
<div style="color: blue;">
Hello ${title}
Find your message here: ${message}
From,
Adobe Team
-------------------------------------------------------
This is an automatic generated message. Please do not reply.
</div>
我不知道template中是否有一些必要的格式否则不起作用。反正网上说的一大堆都看不懂,感觉在讲废话。
第三步
转载自:AEM – Custom Template’d Email
主要有几点:
- @Reference MessageGatewayService
- EMAIL_TEMPLATE = "/content/dam/xxx/emailTemplate.txt" 自己定义的template地址
- parameters.put("title", "Demo Email");
- email.addTo() 是发给谁
import com.day.cq.commons.mail.MailTemplate;
import com.day.cq.mailer.MessageGateway;
import com.day.cq.mailer.MessageGatewayService;
import org.apache.commons.lang.text.StrLookup;
import org.apache.commons.mail.HtmlEmail;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import javax.servlet.Servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.rmi.ServerException;
import java.util.HashMap;
import java.util.Map;
import javax.jcr.Node;
@Component(service = Servlet.class,
property = {
"service.id=" + "Email Servlet",
"sling.servlet.paths=" + "/apps/email",
"sling.servlet.methods=" + "GET"
})
public class EmailServlet extends SlingSafeMethodsServlet {
private static final long serialVersionUID = 1L;
private static final String EMAIL_TEMPLATE = "/content/dam/xxx/emailTemplate.txt";
@Reference
private MessageGatewayService messageGatewayService;
@Override
protected void doGet(final SlingHttpServletRequest req, final SlingHttpServletResponse resp)
throws ServerException, IOException {
PrintWriter out = resp.getWriter();
out.println("success");
try {
Node templateNode = req.getResourceResolver().getResource(EMAIL_TEMPLATE).adaptTo(Node.class);
final Map<String, String> parameters = new HashMap<String, String>();
parameters.put("title", "Demo Email");
parameters.put("message", "It's hard doing this email task.");
final MailTemplate mailTemplate = MailTemplate.create(EMAIL_TEMPLATE, templateNode.getSession());
HtmlEmail email = mailTemplate.getEmail(StrLookup.mapLookup(parameters), HtmlEmail.class);
email.setSubject("AEM - Demo Email for Templated email");
email.addTo("xxx@qq.com","xxx@gmail.com");
MessageGateway<HtmlEmail> messageGateway = messageGatewayService.getGateway(HtmlEmail.class);
messageGateway.send(email);
out.write("email sent");
out.close();
} catch (Exception e) {
e.printStackTrace();
resp.getWriter().write(e.getMessage());
resp.getWriter().close();
}
}
}
结束语
最恶心的是什么,总是发几下邮件就开始出错,过一会又可以发。可能有限制?还是我哪里没有操作好。很烦。(上文已解决)
知识离开了脑子,就只是一堆文字

浙公网安备 33010602011771号