안 드 로 이 드 는 자바 메 일 을 사용 하여 이메일 그룹 에 첨부 파일 을 보 냅 니 다.

11343 단어 AndroidEmail군 발
이전에 안 드 로 이 드 에서 이메일 을 보 내 는 것 에 관 한 글 을 썼 는데,그 안에 사용 되 는 것 은 암시 적 인 intent 로 시스템 이 가지 고 있 는 메 일 발송 기능 을 활성화 하 는 것 이다.
오늘 은 이 메 일 발송 기능 을 스스로 실현 하 는 데 하루 가 걸 렸 다.
여 기 는 gmail 을 발송 자의 메 일 로 하고 다른 왕 이,시 나 닷 컴 같은 것 도 ok,QQ 는 안 될 것 같 습 니 다.
다음은 실현 절차 및 관련 코드 입 니 다.
프로젝트 추가 jar 패키지
activation.jar,addition nal.jar,mail.jar 를 프로젝트 의 libs 폴 더 에 넣 습 니 다.그리고 항목 에서 이 세 개의 가방 을 선택 하고 우 클릭->Build Path->Add to buildPath.
성공 후 항목 을 추가 합 니 다.이렇게...

항목 에 Mail 클래스 추가

package com.example.mailtest;
import java.util.Date; 
import java.util.Properties; 
import javax.activation.CommandMap; 
import javax.activation.DataHandler; 
import javax.activation.DataSource; 
import javax.activation.FileDataSource; 
import javax.activation.MailcapCommandMap; 
import javax.mail.BodyPart; 
import javax.mail.Multipart; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeBodyPart; 
import javax.mail.internet.MimeMessage; 
import javax.mail.internet.MimeMultipart; 
 
 
public class Mail extends javax.mail.Authenticator { 
 private String _user; 
 private String _pass; 
 
 private String[] _to; 
 private String _from; 
 
 private String _port; 
 private String _sport; 
 
 private String _host; 
 
 private String _subject; 
 private String _body; 
 
 private boolean _auth; 
 
 private boolean _debuggable; 
 
 private Multipart _multipart; 
 
 
 public Mail() { 
 _host = "smtp.gmail.com"; // default smtp server 
 _port = "465"; // default smtp port 
 _sport = "465"; // default socketfactory port 
 
 _user = ""; // username 
 _pass = ""; // password 
 _from = ""; // email sent from 
 _subject = ""; // email subject 
 _body = ""; // email body 
 
 _debuggable = false; // debug mode on or off - default off 
 _auth = true; // smtp authentication - default on 
 
 _multipart = new MimeMultipart(); 
 
 // There is something wrong with MailCap, javamail can not find a handler for the multipart/mixed part, so this bit needs to be added. 
 MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap(); 
 mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html"); 
 mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml"); 
 mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain"); 
 mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed"); 
 mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); 
 CommandMap.setDefaultCommandMap(mc); 
 } 
 
 public Mail(String user, String pass) { 
 this(); 
 
 _user = user; 
 _pass = pass; 
 } 
 public void setTo(String[] toArr) {
 this._to = toArr;
 }
 
 public void setFrom(String string) {
 this._from = string;
 }
 
 public void setSubject(String string) {
 this._subject = string;
 }
 public boolean send() throws Exception { 
 Properties props = _setProperties(); 
 
 if(!_user.equals("") && !_pass.equals("") && _to.length > 0 && !_from.equals("") && !_subject.equals("") && !_body.equals("")) { 
 Session session = Session.getInstance(props, this); 
 
 MimeMessage msg = new MimeMessage(session); 
 
 msg.setFrom(new InternetAddress(_from)); 
 
 InternetAddress[] addressTo = new InternetAddress[_to.length]; 
 for (int i = 0; i < _to.length; i++) { 
 addressTo[i] = new InternetAddress(_to[i]); 
 } 
 msg.setRecipients(MimeMessage.RecipientType.TO, addressTo); 
 
 msg.setSubject(_subject); 
 msg.setSentDate(new Date()); 
 
 // setup message body 
 BodyPart messageBodyPart = new MimeBodyPart(); 
 messageBodyPart.setText(_body); 
 _multipart.addBodyPart(messageBodyPart); 
 // Put parts in message 
 msg.setContent(_multipart); 
 // send email 
 Transport.send(msg); 
 
 return true; 
 } else { 
 return false; 
 } 
 } 
 
 public void addAttachment(String filename) throws Exception { 
 BodyPart messageBodyPart = new MimeBodyPart(); 
 DataSource source = new FileDataSource(filename); 
 messageBodyPart.setDataHandler(new DataHandler(source)); 
 messageBodyPart.setFileName(filename); 
 
 _multipart.addBodyPart(messageBodyPart); 
 } 
 
 @Override 
 public PasswordAuthentication getPasswordAuthentication() { 
 return new PasswordAuthentication(_user, _pass); 
 } 
 
 private Properties _setProperties() { 
 Properties props = new Properties(); 
 
 props.put("mail.smtp.host", _host); 
 
 if(_debuggable) { 
 props.put("mail.debug", "true"); 
 } 
 
 if(_auth) { 
 props.put("mail.smtp.auth", "true"); 
 } 
 
 props.put("mail.smtp.port", _port); 
 props.put("mail.smtp.socketFactory.port", _sport); 
 props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
 props.put("mail.smtp.socketFactory.fallback", "false"); 
 
 return props; 
 } 
 
 // the getters and setters 
 public String getBody() { 
 return _body; 
 } 
 
 public void setBody(String _body) { 
 this._body = _body; 
 } 
 
 // more of the getters and setters ….. 
} 
MailActivity 호출

package com.example.mailtest;
 
 
import java.util.Properties;
 
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
 
 
 
 
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.app.ProgressDialog;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
 
public class MailActivity extends Activity {
 
 private Button sendBtn;
 private String username;
 private String password;
 private Handler sendHandler;
 private ProgressDialog progressDialog;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_mail);
 sendBtn=(Button)findViewById(R.id.btnSend);
 sendHandler = new Handler();
 sendBtn.setOnClickListener(new View.OnClickListener() { 
 public void onClick(View v) { 
 SendTask sTask = new SendTask(); 
 sTask.execute();
 } 
 }); 
 
 } 
 
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
 // Inflate the menu; this adds items to the action bar if it is present.
 getMenuInflater().inflate(R.menu.activity_mail, menu);
 return true;
 }
 
 
 
 class SendTask extends AsyncTask<Integer, Integer, String>{ 
 //           (          ),  (publishProgress  ),       
 
 @Override 
 protected void onPreExecute() { 
 //        
 Toast.makeText(getApplicationContext(), "Begin Send!", Toast.LENGTH_SHORT).show(); 
 super.onPreExecute(); 
 } 
 
 @Override 
 protected String doInBackground(Integer... params) { 
 //       ,onPreExecute()       
 // TODO Auto-generated method stub 
 Mail m = new Mail("[email protected]", "*****"); 
 
 String[] toArr = {"[email protected]","[email protected]"}; 
 m.setTo(toArr); 
 m.setFrom("[email protected]"); 
 m.setSubject("JavamailTest"); 
 m.setBody("Email body."); 
 
 try {
 //If you want add attachment use function addAttachment.
 //m.addAttachment("/sdcard/filelocation"); 
 
 if(m.send()) { 
  System.out.println("Email was sent successfully."); 
 } else { 
  System.out.println("Email was not sent.");
 } 
 } catch(Exception e) { 
 //Toast.makeText(MailApp.this, "There was a problem sending the email.", Toast.LENGTH_LONG).show(); 
 Log.e("MailApp", "Could not send email", e); 
 }
 
 return ""; 
 } 
 
 @Override 
 protected void onProgressUpdate(Integer... progress) { 
 //     doInBackground  publishProgress   ,            
 //            ,    progesss[0]    
 // n     progress[n]     
 super.onProgressUpdate(progress); 
 } 
 
 @Override 
 protected void onPostExecute(String r) { 
 //doInBackground     ,    ,  doInBackground       
 //   result    doInBackground       ,     "    " 
 //setTitle(result); 
 super.onPostExecute(r); 
 } 
 
 } 
 
}
AsyncTask 를 사 용 했 습 니 다.UI 스 레 드 에 인터넷 을 직접 연결 하거나 android.os.NetworkOnMainThreadException 이상 을 터 뜨 려 야 합 니 다.
레이아웃 파일
메 인 인터페이스의 레이아웃 파일 은 매우 간단 합 니 다.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context=".MailActivity" >
 
 <TextView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_centerHorizontal="true"
  android:layout_centerVertical="true"
  android:text="@string/hello_world" />
 
 <Button
  android:id="@+id/btnSend"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignParentLeft="true"
  android:layout_alignParentTop="true"
  android:layout_marginTop="19dp"
  android:text="Send" />
 
</RelativeLayout>
실행 효과 그림:

클릭 하여 발송 후

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기