2014-03-13 2 views
0

나는 등록 된 메일 id.i로 이메일을 보내기 위해 원시 안드로이드 응용 프로그램을 개발 중입니다. 어떤 클라이언트도 메일을 보내지 않으려면 직접 메일을 보냅니다. 일단 사용자가 메일 보내기 버튼을 클릭하면 내 레이아웃 설계 감사Acknowledgement 이메일

안드로이드 https://code.google.com/p/javamail-android/ 에 대한 위의 다운로드 mail.jar와 activation.jar을위한
+0

당신은 서버 측에서해야합니다. 보안상의 이유로 적어도 보내기 버튼을 요구할 것입니다. 당신이 실용적으로 할 수있는 것들, 즉 수령인과 몸. – Rahul

+0

@Rahul : 고맙습니다, 샘플 코드 또는 코드가 –

+0

인데 고맙습니다. Intent email = new Intent (Intent.ACTION_SEND); \t email.putExtra (Intent.EXTRA_EMAIL, new String [] { "[email protected]"}); \t \t \t email.putExtra (Intent.EXTRA_SUBJECT, "subject"); \t email.putExtra (Intent.EXTRA_TEXT, "message"); \t email.setType ("message/rfc822"); \t startActivity (Intent.createChooser (전자 메일, "전자 메일 클라이언트 선택 :")); – Rahul

답변

0
import java.util.Properties; 

import javax.activation.DataHandler; 
import javax.mail.Message; 
import javax.mail.Session; 
import javax.mail.URLName; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 
import javax.mail.util.ByteArrayDataSource; 

import android.accounts.Account; 
import android.accounts.AccountManager; 
import android.accounts.AccountManagerCallback; 
import android.accounts.AccountManagerFuture; 
import android.app.Activity; 
import android.os.Bundle; 
import android.os.StrictMode; 
import android.util.Log; 

import com.sun.mail.smtp.SMTPTransport; 
import com.sun.mail.util.BASE64EncoderStream; 

public class GMailSender { 
    private Session session; 
    private String token; 


    public String getToken() { 
     return token; 
    } 

    public GMailSender(Activity ctx) { 
     super(); 
     initToken(ctx); 
    } 

    public void initToken(Activity ctx) { 

     AccountManager am = AccountManager.get(ctx); 

     Account[] accounts = am.getAccountsByType("com.google"); 
     for (Account account : accounts) { 
      Log.d("getToken", "account="+account); 
     } 

     Account me = accounts[0]; //You need to get a google account on the device, it changes if you have more than one 


     am.getAuthToken(me, "oauth2:https://mail.google.com/", null, ctx, new AccountManagerCallback<Bundle>(){ 
      @Override 
      public void run(AccountManagerFuture<Bundle> result){ 
       try{ 
        Bundle bundle = result.getResult(); 
        token = bundle.getString(AccountManager.KEY_AUTHTOKEN); 
        Log.d("initToken callback", "token="+token);  

       } catch (Exception e){ 
        Log.d("test", e.getMessage()); 
       } 
      } 
     }, null); 

     Log.d("getToken", "token="+token); 
    } 



    public SMTPTransport connectToSmtp(String host, int port, String userEmail, 
      String oauthToken, boolean debug) throws Exception { 

     Properties props = new Properties(); 
     props.put("mail.smtp.starttls.enable", "true"); 
     props.put("mail.smtp.starttls.required", "true"); 
     props.put("mail.smtp.sasl.enable", "false"); 

     session = Session.getInstance(props); 
     session.setDebug(debug); 

     final URLName unusedUrlName = null; 
     SMTPTransport transport = new SMTPTransport(session, unusedUrlName); 
     // If the password is non-null, SMTP tries to do AUTH LOGIN. 
     final String emptyPassword = null; 

     /* enable if you use this code on an Activity (just for test) or use the AsyncTask 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
     */ 

     transport.connect(host, port, userEmail, emptyPassword); 

     byte[] response = String.format("user=%s\1auth=Bearer %s\1\1", 
       userEmail, oauthToken).getBytes(); 
     response = BASE64EncoderStream.encode(response); 

     transport.issueCommand("AUTH XOAUTH2 " + new String(response), 235); 

     return transport; 
    } 

    public synchronized void sendMail(String subject, String body, String user, 
      String oauthToken, String recipients) { 
     try { 

      SMTPTransport smtpTransport = connectToSmtp("smtp.gmail.com", 587, 
        user, oauthToken, true); 

      MimeMessage message = new MimeMessage(session); 
      DataHandler handler = new DataHandler(new ByteArrayDataSource(
        body.getBytes(), "text/plain")); 
      message.setSender(new InternetAddress(user)); 
      message.setSubject(subject); 
      message.setDataHandler(handler); 
      if (recipients.indexOf(',') > 0) 
       message.setRecipients(Message.RecipientType.TO, 
         InternetAddress.parse(recipients)); 
      else 
       message.setRecipient(Message.RecipientType.TO, 
         new InternetAddress(recipients)); 
      smtpTransport.sendMessage(message, message.getAllRecipients()); 

     } catch (Exception e) { 
      Log.d("test", e.getMessage(), e); 
     } 
    } 

} 

또는 시도 이러한 링크 : http://nilvec.com/sending-email-without-user-interaction-in-android/ Javamail api in android using XOauth http://google-mail-xoauth-tools.googlecode.com/svn/trunk/java/com/google/code/samples/xoauth/XoauthAuthenticator.java

+0

yea 나는 이것을 시도했으나 메일 클라이언트를 보낼 것인가?하지만 클라이언트없이 직접 보낼 수 있습니까? –

+0

이 코드를 사용해보십시오. 작동 중입니다 .. – Rahul