【通过SMTP(Gmail)在Android上发送电子邮件】不操千曲而后晓声,观千剑而后识器。这篇文章主要讲述通过SMTP(Gmail)在Android上发送电子邮件相关的知识,希望能为你提供帮助。
- package org.apache.android.mail;
- 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 GMailSender extends javax.mail.Authenticator {
- private String mailhost = " smtp.gmail.com" ;
- private String user;
- private String password;
- private Session session;
- static {
- Security.addProvider( new org.apache.harmony.xnet.provider.jsse.JSSEProvider( ) ) ;
- }
- public GMailSender( 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 recipients) throws Exception {
- MimeMessage message = new MimeMessage( session) ;
- DataHandler handler = new DataHandler( new ByteArrayDataSource( body.getBytes( ) , " text/plain" ) ) ;
- message.setSender( new InternetAddress( sender) ) ;
- 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) ;
- }
- public class ByteArrayDataSource implements DataSource {
- private byte[ ] data;
- private String type;
- public ByteArrayDataSource( byte[ ] data, String type) {
- super( ) ;
- this.data = https://www.songbingjia.com/android/data;
- this.type = type;
- }
- public ByteArrayDataSource( byte[ ] data) {
- super( ) ;
- this.data = https://www.songbingjia.com/android/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" ) ;
- }
- }
- }
推荐阅读
- 终端.app打开Apache的命令?s码httpd.conf文件文本编辑中的文件
- 开发Android应用程序的提示(我的经验教训)
- 构建实时,多平台移动应用程序(使用Ionic Framework和Firebase的示例)
- 微软HoloLens评论-缩小AR与VR之间的鸿沟
- Smartwatch开发(Smartwatch是否值得解决())
- 我们是否正在创建不安全的物联网(IoT)(安全挑战与担忧)
- 生物识别安全性–无密码认证是关键还是一时的流行()
- Android测试教程(像真正的绿色机器人一样进行单元测试)
- iOS 8应用程序扩展教程