⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sendmailaction.java

📁 Eclipse RCP下编写的工作管理软件代码
💻 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 + -