import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Vector;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.FetchProfile;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Header;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
public class Mymail {
private static final String SMTP_HOST_NAME = "smpt.163.com";
private static final String POP3_HOST_NAME = "pop3.163.com";
private static String USERNAME = "";
private static String PASSWORD = "";
//private static final String emailMsgTxt = "测试";
private static final String emailSubjectTxt = "享受生活中的每一刻";
private static final String emailFromAddress = "test@163.com";
private String filename="";
private Vector<String> file = new Vector<String>();
// Add List of Email address to who email needs to be sent to
private static final String[] emailList = {"test@163.com"};
//private static String attachpath = "E:/email/";
private static String contentpath = "E:/邮件.txt";
private static String savepath = "E:/email/";
public static void main(String args[]) throws Exception{
//System.out.println(emailMsgTxt);
//smtpMailSender.attachfiles("E:/tosend");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Mymail smtpMailSender = new Mymail ();
while(true){
System.out.println("press number 1 to post mail,number 2 to fetch mail,0 to exit");
String number = reader.readLine();
int flag = 0;
while(true){
try{
flag = Integer.parseInt(number);
break;
}catch(Exception e){
System.out.println("please input number");
number = reader.readLine();
}
}
switch(flag){
case 0:{
System.out.println("Bye-Bye!/nWelcome to back next time.");
System.exit(0);
}
case 1:{
String content = smtpMailSender.readFromFile();
smtpMailSender.attachfile("E:/email/当下的幸福.pps");
smtpMailSender.read(0);
while(smtpMailSender.postMail( emailList, emailSubjectTxt, content, emailFromAddress)==false){
smtpMailSender.read(1);
}
break;
}
case 2:{
smtpMailSender.read(0);
while(smtpMailSender.fetchMail()==false){
smtpMailSender.read(1);
}
break;
}
default :break;
}
}
}
private void read(int c) throws Exception{
if(USERNAME!="" && PASSWORD!=""){
return ;
}
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
if(c==0){
System.out.print("Please input username and password/nUsername:");
}else{
System.out.print("Invalid username or password,please input again/nUsername:");
}
USERNAME = reader.readLine();
System.out.print("Password:");
PASSWORD = reader.readLine();
}
public void sendMail(String subject, String content) throws Exception{
postMail( emailList, subject, content, emailFromAddress);
System.out.println("Sucessfully Sent mail to All Users");
}
public boolean postMail( String recipients[], String subject,
String message , String from){
boolean debug = false;
//Set the host smtp address
Properties props = System.getProperties();
props.put("mail.smtp.host", SMTP_HOST_NAME);
props.put("mail.smtp.auth", "true");
//设置代理,但是无效
//props.put("proxySet", "true");
//props.put("http.ProxyPort", "192.168.12.227");
//props.put("http.sProxyHost", "8888");
Authenticator auth = new SMTPAuthenticator();
Session session = Session.getInstance(props, auth);
session.setDebug(debug);
// create a message
Message msg = new MimeMessage(session);
// set the from and to address
try{
InternetAddress addressFrom = new InternetAddress(from);
msg.setFrom(addressFrom);
InternetAddress[] addressTo = new InternetAddress[recipients.length];
for (int i = 0; i < recipients.length; i++){
addressTo[i] = new InternetAddress(recipients[i]);
}
msg.setRecipients(Message.RecipientType.TO, addressTo);
Multipart mp = new MimeMultipart();
Enumeration efile=file.elements();
while(efile.hasMoreElements()){
MimeBodyPart mbp = new MimeBodyPart();
filename = efile.nextElement().toString();
FileDataSource fds = new FileDataSource(filename);
mbp.setDataHandler(new DataHandler(fds));
//用于解决中文乱码问题
//sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
//mbp.setFileName("=?GBK?B?"+enc.encode(fds.getName().getBytes())+"?=");
mbp.setFileName(MimeUtility.encodeText(fds.getName()));
mp.addBodyPart(mbp);
}
MimeBodyPart mbp = new MimeBodyPart();
mbp.setContent(message, "text/plain;charset=gbk");
mp.addBodyPart(mbp);
// Setting the Subject and Content Type
msg.setSubject(subject);
msg.setSentDate(new Date((new Date()).getTime()-325000));
//msg.setContent(message, "text/plain;charset=GBK");
msg.setContent(mp);
Enumeration em = msg.getAllHeaders();
while(em.hasMoreElements()){
Header h = (Header)em.nextElement();
System.out.println(h.getName()+":"+h.getValue());
}
//msg.setHeader("X-Smtpd-IP", "192.168.12.201");
//msg.setText(message);
Transport.send(msg);
session = null;
}catch(Exception e){
//e.printStackTrace();
USERNAME="";
PASSWORD="";
return false;
}
file.removeAllElements();
System.out.println("Sucessfully Sent mail to All Users");
return true;
}
@SuppressWarnings("deprecation")
public boolean fetchMail(){
Session session = Session.getDefaultInstance(System.getProperties(),null);
Folder inbox = null;
Store store = null;
try{
store = session.getStore("pop3");
System.out.print("connecting......");
store.connect(POP3_HOST_NAME, USERNAME, PASSWORD);
System.out.println("successfully");
}catch(Exception e){
System.out.println("failure");
USERNAME="";
PASSWORD="";
return false;
}
try{
inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_WRITE);
FetchProfile profile = new FetchProfile();
profile.add(FetchProfile.Item.ENVELOPE);
Message[] messages = inbox.getMessages();
inbox.fetch(messages, profile);
//profile.add(UIDFolder.FetchProfileItem.UID);
System.out.println("Inbox Number of Message :" + messages.length);
for (int i = 0; i < messages.length; i++) {
System.out.println("The Email Number: " + (i+1));
if(messages[i].getFlags().contains(Flags.Flag.SEEN)){
continue;
}
String from = decodeText(messages[i].getFrom()[0].toString());
String subject = "";
InternetAddress ia = new InternetAddress(from);
System.out.println("FROM:" + ia.getPersonal()+'('+ia.getAddress()+')');
//标志邮件为已读,但是无效
messages[i].setFlag(Flags.Flag.SEEN, true);
//String pattern = "^([//S_//s|//:])*/";
String pattern = "//s|//:";
subject = messages[i].getSubject().replaceAll(pattern, "");
System.out.println("TITLE:" + messages[i].getSubject());
System.out.println("TITLE:" + subject);
//System.out.println("DATE:" + messages[i].getSentDate().toLocaleString());
if(messages[i].isMimeType("text/plain")){
//saveFile(attachpath + subject +".txt", messages[i].getContent().toString());
System.out.println(messages[i].getContentType());
if(subject.startsWith("=?gb?")){
subject = subject.replace("=?gb?", "=?GBK?");
subject = decodeText(subject);
}
saveFile(savepath + subject +".txt", messages[i].getInputStream());
System.out.println("/n=======================================");
continue;
}
Multipart mp = (Multipart)messages[i].getContent();
for(int j=0;j<mp.getCount();j++){
MimeBodyPart mbp = (MimeBodyPart)mp.getBodyPart(j);
System.out.println(mbp.getContentType());
if(mbp.getFileName()!=null){
saveFile(savepath + decodeText(mbp.getFileName()),mbp.getInputStream());
}else{
saveFile(savepath + subject+".html",mbp.getContent().toString());
}
}
System.out.println("/n=======================================");
}
inbox.close(true);
store.close();
session = null;
}catch(Exception e){
e.printStackTrace();
}
return true;
}
/**
* SimpleAuthenticator is used to do simple authentication
* when the SMTP server requires it.
*/
private class SMTPAuthenticator extends javax.mail.Authenticator{
public PasswordAuthentication getPasswordAuthentication(){
String username = USERNAME;
String password = PASSWORD;
return new PasswordAuthentication(username, password);
}
}
//保存附件
private void saveFile(String filename, InputStream stream)throws Exception {
FileOutputStream writer = new FileOutputStream(filename);
byte[] buf = new byte[4096];
int len = 0;
while ((len = stream.read(buf)) > 0)
{
writer.write(buf, 0, len);
}
writer.flush();
writer.close();
}
//将收到的邮件正文保存下来
private void saveFile(String filename,String content)throws Exception {
BufferedWriter out = new BufferedWriter(new FileWriter(filename));
content = content.replace("/n", "/r/n");
out.write(content);
out.flush();
out.close();
}
//从文件中获取邮件正文
private String readFromFile() {
String content = "";
String filepath = contentpath;
try {
String line;
BufferedReader in = new BufferedReader(new FileReader(filepath));
while((line = in.readLine()) != null){
content += line + "/n";
}
in.close();
} catch (Exception e) {
e.printStackTrace();
}
return content;
}
//添加附件名
public void attachfile(String fname){
file.addElement(fname);
}
//遍历目录以及所有子目录下的文件
public void attachfiles(String list){
File f = new File(list);
if(f.exists()==false){
System.out.println("the directory is not exist.");
}
File[] dir = f.listFiles();
for(int i=0;i<dir.length;i++){
if(dir[i].isDirectory()){
attachfiles(list+"/"+dir[i].getName());
//System.out.println(dir[i].getName());
}else{
if(dir[i].getName().endsWith("jpg") || dir[i].getName().endsWith("gif")){
//file.addElement(list +"/"+ dir[i].getName());
//System.out.println(dir[i].getName());
}
file.addElement(list +"/"+ dir[i].getName());
System.out.println(dir[i].getName());
}
}
}
//解码
private static String decodeText(String text) throws UnsupportedEncodingException {
if (text == null)
return null;
if (text.startsWith("=?GB") || text.startsWith("=?gb")){
text = MimeUtility.decodeText(text);
//text = new String(text.getBytes("gbk"),"gb2312");
}
else{
text = new String(text.getBytes("ISO8859_1"));
}
return text;
}
}
JavaMail收发邮件(包含附件)
最新推荐文章于 2023-09-22 14:15:00 发布