您的位置:首页 > 其它

邮件开发项目的总结

2011-06-07 16:44 190 查看
这个月主要是做邮件开发项目,熟悉了javamail的一些应用,了解了邮件Mime格式。还有制作邮件内容的CKEditor编辑器(搞了很头疼。。)。算是做下总结了,以避免忘记。

1,javaMail的使用,用一个发送邮件的demo吧。

public class MailSendAction {
private static final Logger logger = Logger.getLogger(MailSendAction.class);

public static void main(String[] args) {
try {
String hostName = "smtp.qq.com";
String EMAIL_NAME = "258072761";
String EMAIL_PASSWORD = "*********";
MailSendAction mailAction = new MailSendAction();
Properties props = System.getProperties(); // 获得系统属性对象
props.put("mail.smtp.host", hostName); // 设置SMTP主机
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props);

// 发送开始
Transport transport = session.getTransport("smtp");
transport.connect((String) props.get("mail.smtp.host"),
EMAIL_NAME, EMAIL_PASSWORD);

// transport.sendMessage(message,
// message.getRecipients(Message.RecipientType.TO));
transport.close();
} catch (Exception e) {
e.printStackTrace();
}

}

public MimeBodyPart createAttachment(String fileName) throws Exception {
MimeBodyPart attachementPart = new MimeBodyPart();
FileDataSource fds = new FileDataSource(fileName);
attachementPart.setDataHandler(new DataHandler(fds));
String[] strs = fds.getName().split("_",2);
if(strs.length>1)
attachementPart.setFileName(strs[1]);
else
attachementPart.setFileName(fds.getName());
return attachementPart;
}

public MimeBodyPart createContent(String body, String fileName)
throws Exception {
MimeBodyPart contentBody = new MimeBodyPart();
MimeMultipart contentMulti = new MimeMultipart("related");
// 正文文本部分
MimeBodyPart textBody = new MimeBodyPart();
textBody.setContent(body, "text/html;charset=gbk");
contentMulti.addBodyPart(textBody);

// 正文图片部分
MimeBodyPart jpgBody = new MimeBodyPart();
FileDataSource fds = new FileDataSource(fileName);
jpgBody.setDataHandler(new DataHandler(fds));
jpgBody.setContentID("logo_jpg");
contentMulti.addBodyPart(jpgBody);

contentBody.setContent(contentMulti);
return contentBody;
}

/**
*
* @param body
* @param fileName
* @return
* @throws Exception
*/
public MimeBodyPart createContent(String body, List<String> imgFileNames)
throws Exception {
MimeBodyPart relatedBodyPart = new MimeBodyPart();
MimeMultipart relatedMulti = new MimeMultipart("related");
// 正文文本部分
MimeBodyPart alternativeBodyPart = new MimeBodyPart();
MimeMultipart alternativeMulti = new MimeMultipart("alternative");

MimeBodyPart textBody = new MimeBodyPart();
textBody.setContent(body, "text/html;charset=gbk");
alternativeMulti.addBodyPart(textBody);
alternativeBodyPart.setContent(alternativeMulti);
relatedMulti.addBodyPart(alternativeBodyPart);

// 内置资源部分
int i = 0;
for (String imgFileName : imgFileNames) {
MimeBodyPart jpgBody = new MimeBodyPart();
FileDataSource fds = new FileDataSource(imgFileName);
jpgBody.setDataHandler(new DataHandler(fds));
jpgBody.setContentID("img" + i);
relatedMulti.addBodyPart(jpgBody);
i++;
}
relatedBodyPart.setContent(relatedMulti);
return relatedBodyPart;
}

/**
*
* @param session
* @return
* @throws Exception
*/
public MimeMessage createMessage(String subject, String body,
Session session, List<String> imgFileNames,
List<String> attacheFilePaths) throws Exception {

MimeMessage msg = new MimeMessage(session);
msg.setSubject(subject, "gb2312");

// 创建邮件的各个MimeBodyPart部份

// 创建附件
List<MimeBodyPart> attachmentList = new ArrayList<MimeBodyPart>();

for (String attachFilePath : attacheFilePaths) {
attachmentList.add(createAttachment(attachFilePath));
}

MimeBodyPart content = createContent(body, imgFileNames);

// 将邮件中各个部份组合到一个"mixed"型的MimeMultipart对象
MimeMultipart allpart = new MimeMultipart("mixed");
for (MimeBodyPart mimeBodyPart : attachmentList) {
allpart.addBodyPart(mimeBodyPart);
}
allpart.addBodyPart(content);

// 将上面混合型的 MimeMultipart对象作为邮件内容并保存
msg.setContent(allpart);
return msg;

}

public static String sendMail(String emlPath, String to){
try {
String hostName = "smtp.qq.com";
String EMAIL_NAME = "258072761";
String EMAIL_PASSWORD = "hhysbyj123456";
String from = "258072761@qq.com";
Properties props = System.getProperties(); // 获得系统属性对象
props.put("mail.smtp.host", hostName); // 设置SMTP主机
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props);
InputStream fis = new FileInputStream(emlPath);
MimeMessage message = new MimeMessage(session, fis);
message.setRecipients(Message.RecipientType.TO, (Address[])
InternetAddress.parse(to));
message.setFrom(new InternetAddress(from));

// 发送开始
Transport transport = session.getTransport("smtp");
transport.connect((String) props.get("mail.smtp.host"),
EMAIL_NAME, EMAIL_PASSWORD);

transport.sendMessage(message,
message.getRecipients(Message.RecipientType.TO));
transport.close();
return "发送邮件成功";

} catch (Exception e) {
e.printStackTrace();
}
return "";
}
} Mime邮件的格式请见:http://dev.csdn.net/htmls/18/18448.html

2,关于ckeditor编辑器的使用

<tr>
<th width="15%">邮件内容</th>
<td id= "mailContent" width="85%" colspan="3">
<textarea id="content" name="content" style="display:none"></textarea>
<script type="text/javascript">

CKEDITOR.replace('content',{filebrowserUploadUrl : '/MailManager/ckeditor/uploader?Type=File',
filebrowserImageUploadUrl : '/MailManager/ckeditor/uploader?Type=Image',
filebrowserFlashUploadUrl : '/MailManager/ckeditor/uploader?Type=Flash'
});
</script>

<span id="sendTimeTip"></span>
</td>
</tr> jsp页面导入:<%@ taglib uri="http://ckeditor.com" prefix="ckeditor" %><script type="text/javascript" src="../javascript/ckeditor/ckeditor.js" charset="UTF-8"></script>在制作邮件内容时,动态删除了mailContent节点,然后重新生成一个ckeditor编辑器,怎么都生成不出来,后来知道是没有销毁对象的原因,正确的销毁对象:

if(CKEDITOR.instances['content'])//content为代替textarea的id名称
delete CKEDITOR.instances['content'];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: