📄 sendmailaction.java
字号:
package net.sf.pim.mail.compose;
import java.util.Map;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Store;
import javax.mail.URLName;
import javax.mail.internet.MimeUtility;
import net.sf.pim.mail.MailPlugin;
import net.sf.pim.mail.MailUtil;
import net.sf.util.ConfigHelper;
import net.sf.util.StringUtil;
import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
public class SendMailAction extends Action implements IWorkbenchAction {
// 写邮件的composite
private MessageComposer messageComposer;
// 主窗口
private ComposeWindow composeWindow;
public SendMailAction() {
super();
setToolTipText("发送");
setImageDescriptor(MailPlugin.getImageDescriptor("icons/send.gif"));
}
@Override
public void run() {
final Map<String,String> map=messageComposer.getMail();
if(StringUtil.isNull(map.get("TO")) || StringUtil.isNull(map.get("SUBJECT"))){
MessageDialog.openError(messageComposer.getShell(), "错误","收件人及主题不能为空");
return;
}
BusyIndicator.showWhile(Display.getCurrent(), new Runnable() {
public void run(){
try{
MultiPartEmail email = new MultiPartEmail();
URLName smtp = new URLName(ConfigHelper.getSmtp()[0]);
email.setAuthenticator(new DefaultAuthenticator(smtp.getUsername(),smtp.getPassword()));
// email.setDebug(true);
email.addHeader("X-Mailer", "Mywork PIMail Application,http://mywork.sf.net");
email.setHostName(smtp.getHost());
String[][] address = MailUtil.spliteAddress(ConfigHelper.getAddress()[0]);
email.setFrom(address[0][1],address[0][0]);
setToList(email,map);
setCcList(email,map);
email.setSubject(map.get("SUBJECT"));
email.setMsg(map.get("BODY"));
for(String att:StringUtil.toArray(map.get("ATTACHMENTS"),";")){
EmailAttachment attachment = new EmailAttachment();
attachment.setDisposition(EmailAttachment.ATTACHMENT);
attachment.setName(MimeUtility.encodeText(MailUtil.getTail(att, '/')));
attachment.setPath(att);
email.attach(attachment);
}
email.send();
saveToSentBox(email);
composeWindow.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
});
}
// 设置接收人
private void setToList(MultiPartEmail email, Map<String, String> map)
throws EmailException {
if (map.get("TO").indexOf(";") == -1
|| map.get("TO").indexOf("<") == -1) {
email.addTo(map.get("TO"));
} else {
String[][] list = MailUtil.spliteAddress(map.get("TO"));
for (int i = 0; i < list.length; i++) {
email.addTo(list[i][1], list[i][0]);
}
}
}
// 设置抄送人
private void setCcList(MultiPartEmail email, Map<String, String> map)
throws EmailException {
if (StringUtil.isNull(map.get("CC")))
return;
if (map.get("CC").indexOf(";") == -1
|| map.get("CC").indexOf("<") == -1) {
email.addCc(map.get("CC"));
} else {
String[][] list = MailUtil.spliteAddress(map.get("CC"));
for (int i = 0; i < list.length; i++) {
email.addCc(list[i][1], list[i][0]);
}
}
}
// 在发件箱中保留一份拷贝
private void saveToSentBox(MultiPartEmail email) {
try {
Store store = MailPlugin.getDefault().getStore();
Folder smtp = store.getFolder(MailPlugin.OUTBOX);
if (!smtp.isOpen())
smtp.open(Folder.READ_WRITE);
smtp.appendMessages(new Message[] { email.getMimeMessage() });
} catch (Exception e) {
e.printStackTrace();
}
}
public void dispose() {
}
public MessageComposer getMessageComposer() {
return messageComposer;
}
public void setMessageComposer(MessageComposer messageComposer) {
this.messageComposer = messageComposer;
}
public ComposeWindow getComposeWindow() {
return composeWindow;
}
public void setComposeWindow(ComposeWindow composeWindow) {
this.composeWindow = composeWindow;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -