2017-02-15 136 views
0

任何人都可以建議我如何發送電子郵件,而無需使用意圖或打開另一個Android應用程序。我希望一旦我點擊發送按鈕就可以直接發送電子郵件。我必須使用特定的office365電子郵件發送消息。我應該使用一些API或SMTP等?Android應用程序開發 - 直接發送電子郵件沒有意圖

有沒有一種簡單的方法可以在我的android應用程序上應用此功能?

+1

http://www.edumobile.org/android/send-email-on-button-click-without-email-chooser/ – Pavya

+0

先生,是否在office365帳戶上工作?或任何帳戶從gmail支付? ty – APX

+0

https://github.com/OfficeDev/Office-365-SDK-for-Android –

回答

0

地獄@APX, 這裏是拖班,幫助您發送帶有單個或多個用戶的電子郵件沒有任何圖書館,我認爲這會幫助你,

import javax.activation.DataHandler; 
import javax.activation.DataSource; 
import javax.mail.Message; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 

import java.io.ByteArrayInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.security.Security; 
import java.util.Properties; 

public class MailSender extends javax.mail.Authenticator { 
    private String mailhost = "smtp.gmail.com"; 
    private String user; 
    private String password; 
    private Session session; 

    static { 
     Security.addProvider(new JSSEProvider()); 
    } 

    public MailSender(String user, String password) { 
     this.user = user; 
     this.password = password; 

     Properties props = new Properties(); 
     props.setProperty("mail.transport.protocol", "smtp"); 
     props.setProperty("mail.host", mailhost); 
     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() { 
     return new PasswordAuthentication(user, password); 
    } 

    public synchronized void sendMail(String subject, String body, String sender, String from, String recipients) throws Exception { 
     try { 
      MimeMessage message = new MimeMessage(session); 
      DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/html")); 
      /*message.setSender(new InternetAddress(sender, "Dhaval Solanki"));*/ 
      message.setFrom(new InternetAddress(sender, from)); 
      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)); 
      Transport.send(message); 
     } catch (Exception e) { 

     } 
    } 

    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; 
     } 

     public String getContentType() { 
      if (type == null) 
       return "application/octet-stream"; 
      else 
       return type; 
     } 

     public InputStream getInputStream() throws IOException { 
      return new ByteArrayInputStream(data); 
     } 

     public String getName() { 
      return "ByteArrayDataSource"; 
     } 

     public OutputStream getOutputStream() throws IOException { 
      throw new IOException("Not Supported"); 
     } 
    } 
} 





* Licensed to the Apache Software Foundation (ASF) under one or more 
* contributor license agreements. See the NOTICE file distributed with 
* this work for additional information regarding copyright ownership. 
* The ASF licenses this file to You under the Apache License, Version 2.0 
* (the "License"); you may not use this file except in compliance with 
* the License. You may obtain a copy of the License at 
* 
*  http://www.apache.org/licenses/LICENSE-2.0 
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed under the License is distributed on an "AS IS" BASIS, 
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License. 
*/ 

/** 
* @author Alexander Y. Kleymenov 
* @version $Revision$ 
*/ 


import java.security.AccessController; 
import java.security.Provider; 

public final class JSSEProvider extends Provider { 

    public JSSEProvider() { 
     super("HarmonyJSSE", 1.0, "Harmony JSSE Provider"); 
     AccessController.doPrivileged(new java.security.PrivilegedAction<Void>() { 
      public Void run() { 
       put("SSLContext.TLS", 
         "org.apache.harmony.xnet.provider.jsse.SSLContextImpl"); 
       put("Alg.Alias.SSLContext.TLSv1", "TLS"); 
       put("KeyManagerFactory.X509", 
         "org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl"); 
       put("TrustManagerFactory.X509", 
         "org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl"); 
       return null; 
      } 
     }); 
    } 
} 

您可以使用像下面

MailSender sender = new MailSender("" + authEmail, "" + authPwd); 
        sender.sendMail("" + subject, 
          "" + prepareMailText(name), 
          "" + authEmail, "WeMeal Team", 
          "" + emailList); //email list send comma separated string like ("[email protected],[email protected]") 
+0

編號,而不是使用office365電子郵件發送消息。是否有可能嗎?這個代碼中的什麼參數,我必須改變一些端口或主機等謝謝! – APX

+0

嗨,嘗試與Office 365然後它不會然後在類構造函數中放入以下行: props.put(「mail.smtp.host」,「m.outlook.com」); 以下鏈接將幫助您http://stackoverflow.com/questions/14430962/send -javamail-office-office365 –

+0

好的,謝謝。還有一個,你是如何聲明你的「emailId [0]」的?ty – APX

3

發送郵件是android中的一個關鍵功能,也是一個簡單的功能。

您也可以使用Intent發送郵件,但這需要用戶界面,但這裏的要求與通過使用GMail SMTP和JavaMail API發送電子郵件的目的不同。使用GMail的SMTP服務器發送電子郵件非常簡單且容易。

所以,你可以點擊查看完整的例子: Send Mail in Android without Using Intent

希望這將幫助您爲您的要求。

+0

我應該在我的Gmail上打開「不太安全的應用程序」嗎?如果它不會請求這些權限等,只是一個直接的信息,併爲用戶的關注,它太麻煩了。仍然沒有工作傷心。 halpp – APX

相關問題