import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.NoSuchProviderException;
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.search.SubjectTerm;
import android.util.Log;
public class GmailSender extends javax.mail.Authenticator {
private String TAG = "GmailSender.class";
private String mailhost = "smtp.gmail.com";
private String user;
private String password;
private Session session;
private String source_folder = "Inbox";
private String target_folder = "StealthCam";
private String attachFile;
public GmailSender(String user, String password) {
this.user = user;
this.password = password;
Properties props = new Properties();
//for smtp
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", mailhost);
props.put("mail.smtp.value", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.quitwait", "false");
session = Session.getDefaultInstance(props, this);
}
protected PasswordAuthentication getPasswordAuthentication() {
Log.e("google sender ", "getPasswordAuthentication");
return new javax.mail.PasswordAuthentication(user, password);
}
public synchronized void sendMail(String subject, String body,
String sender, String recipients, String label) throws Exception {
MimeMessage message = new MimeMessage(session);
message.setSender(new InternetAddress(sender));
message.setSubject(subject);
message.setSentDate(new Date());
//email text
MimeBodyPart messagePart = new MimeBodyPart();
messagePart.setText("test");
//attach file
MimeBodyPart attachmentPart = new MimeBodyPart();
FileDataSource fds = new FileDataSource(attachFile){
@Override
public String getContentType(){
return "application/octet-stream";
}
};
attachmentPart.setDataHandler(new DataHandler(fds));
attachmentPart.setFileName(fds.getName());
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messagePart);
multipart.addBodyPart(attachmentPart);
message.setContent(multipart);
MimeMultipart mp = new MimeMultipart();
mp.setSubType("related");
MimeBodyPart mbp1= new MimeBodyPart();
String html =
" html>"+
" head> title> /title> /head>"+
" body>"+
" b> see the following jpg : it is a car! /b> br>"+
" a href=a.jsp>hello /a> br>"+
" IMG SRC=cid:23abc@pc27 width=80% height=60%> br>"+
" b> end of jpg /b>"+
" /body>"+
" /html>";
mbp1.setContent(html,"text/html");
MimeBodyPart mbp2 = new MimeBodyPart();
FileDataSource fds = new FileDataSource(attachFile);
mbp2.setFileName(fds.getName());
mbp2.setText("This is a beautiful car !");
mbp2.setDataHandler(new DataHandler(fds));
mbp2.setHeader("Content-ID","<imag23abc@pc27");
mbp1.setHeader("Content-Type", "image/jpeg; name=" + fds.getName());
mp.addBodyPart(mbp1);
mp.addBodyPart(mbp2);
message.setContent(mp);
message.setSentDate(new Date());
target_folder = label;
if (recipients.indexOf(',') > 0) {
message.setRecipients(Message.RecipientType.TO, InternetAddress
.parse(recipients));
} else {
message.setRecipient(Message.RecipientType.TO, new InternetAddress(
recipients));
}
Log.e("google sender ", "getPasswordAuthentication");
// message.setHeader("content-type", "text/html;charset=UTF-8");
//sending mail
Transport.send(message);
//gmail일 경우에만 폴더 이동
if (!recipients.substring(recipients.indexOf("@")+1).equals("gmail.com")){
return;
}
//move folder used imap
Store store = null;
// store = session.getStore(urln);
try {
store = session.getStore("imaps");
store.connect();
Log.d("GmailSender", "connect store..." + store);
Folder sourceFolder = store.getFolder(source_folder);
Folder targetFolder = store.getFolder(target_folder);
sourceFolder.open(Folder.READ_WRITE);
if (!targetFolder.exists()) {
targetFolder.create(Folder.HOLDS_MESSAGES);
Log.d("GmailSender", "crate folder zetty");
}
if (targetFolder.exists()) {
SubjectTerm term = new SubjectTerm("[StealthCam]");
Message[] messages = sourceFolder.search(term);
Log.d(TAG, "sourceFolder count" + sourceFolder.getMessageCount());
Log.d(TAG, "search count" + messages.length);
sourceFolder.setFlags(messages, new Flags(Flags.Flag.DELETED),true);
sourceFolder.copyMessages(messages, targetFolder);
}
sourceFolder.close(false);
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
store.close();
}
public void setAttachFile(String attachFile){
this.attachFile = attachFile;
}
public class ByteArrayDataSource implements DataSource {
private byte[] data;
private String type;
public ByteArrayDataSource(byte[] data, String type) {
super();
this.data = data;
this.type = type;
}
public ByteArrayDataSource(byte[] data) {
super();
this.data = data;
}
public void setType(String type) {
this.type = type;
}
@Override
public String getContentType() {
if (type == null) {
return "application/octet-stream";
} else {
return type;
}
}
@Override
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(data);
}
@Override
public String getName() {
return "ByteArrayDataSource";
}
@Override
public OutputStream getOutputStream() throws IOException {
throw new IOException("Not Supported");
}
}
}
'android' 카테고리의 다른 글
EditText에서 문장 끝에 커서 놓기 (0) | 2011.01.26 |
---|---|
부트에니메이션 파일 만들기 (0) | 2011.01.24 |
부팅화면 (부트에니메이션) 바꾸기 (0) | 2011.01.24 |
내 앱에 광고달기 - 다음 AD@M (0) | 2011.01.24 |
android hidden 폴더만들기 (0) | 2011.01.23 |