日常工作中,常常要將在公司做的東西拷回家,或者要從家里拷東西到公司,但是如果用U盤拷又太麻煩,上web發(fā)郵件又有點(diǎn)煩,所以就做了下面的小程序,發(fā)送前切版里的內(nèi)容到指定郵箱來傳遞文件.
相關(guān)技術(shù)點(diǎn):
1.JMail郵件發(fā)送
2.剪切板提取
具體代碼實(shí)現(xiàn)如下:
/*
* Created on 2008-3-5
*/
package org.dueam.ft;
import java.awt.HeadlessException;
import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;
import sun.misc.BASE64Encoder;
/**
* 剪切板內(nèi)容發(fā)生
* @author <a href="mailto:windonly@gmail.com">Anemone</a>
* hz,zj,china(2008-3-5)
*/
public class ClipboardFileTransmission {
/**
* @param args
* @throws EmailException
* @throws IOException
* @throws UnsupportedFlavorException
* @throws HeadlessException
*/
@SuppressWarnings("unchecked")
public static void main(String[] args) throws EmailException, HeadlessException, UnsupportedFlavorException,
IOException {
String context = null;
List<File> fileList = null;
/**
* 處理前切版
*/
for (DataFlavor df : Toolkit.getDefaultToolkit().getSystemClipboard().getAvailableDataFlavors()) {
//如果拷貝的是文本內(nèi)容
if (df.equals(DataFlavor.stringFlavor)) {
context = (String) Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor);
}
else if (df.equals(DataFlavor.javaFileListFlavor)) {
//如果拷貝的是文件則當(dāng)附件發(fā)送
fileList = (List<File>) Toolkit.getDefaultToolkit().getSystemClipboard().getData(
DataFlavor.javaFileListFlavor);
}
}
if ((null == context || "".equals(context)) && (fileList == null || fileList.isEmpty())) {
return;
}
if (null == context || "".equals(context)) {
context = "具體資料請(qǐng)看附件";
}
MultiPartEmail email = new MultiPartEmail();
// 發(fā)送服務(wù)器
email.setHostName("smtp.163.com");
//服務(wù)器用戶和密碼(如果你自己搞了臺(tái)不用驗(yàn)證的郵件服務(wù)器就不用了)
email.setAuthentication("XXX", "XXX");
//接收的郵箱
email.addTo("XXX@gmail.com", "我的資料庫");
//發(fā)送服務(wù)器的郵件地址,現(xiàn)在很多郵件提供商都有驗(yàn)證這個(gè)同用戶名是否對(duì)應(yīng),還是老老實(shí)實(shí)填真實(shí)的吧
email.setFrom("XXX@163.com", "Anemone");
email.setSubject("[日常資料傳遞]-" + getTime());
//文本編碼
email.setCharset("utf-8");
email.setMsg(context);
if (null != fileList)
for (File f : fileList) {
if (f.exists() && f.isFile()) {
//處理附件
EmailAttachment attachment = new EmailAttachment();
attachment.setPath(f.getPath());
attachment.setDisposition(EmailAttachment.ATTACHMENT);
attachment.setDescription(getTime() + "By Anemone");
BASE64Encoder enc = new BASE64Encoder();
//附件中文名問題
attachment.setName("=?GBK?B?" + enc.encode(f.getName().getBytes()) + "?=");
email.attach(attachment);
}
}
email.send();
}
public static String getTime() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
return df.format(new Date());
}
}
以上代碼在163和gmail之間測(cè)試通過過,建議用exe4j打成EXE文件,然后扔到system32目錄下面,這樣只要想發(fā)送資料的時(shí)候,只要復(fù)制下資料,再執(zhí)行下這個(gè)命令就一切都OK了.
相關(guān)類包:
下載