我在
Android中使用以下代码发送邮件:
Intent emailIntent = new Intent(Intent.ACTION_SEND); emailIntent.setType("text/html"); emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,sendTo ); emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,"test" ); emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,"msg" );
当编译和运行代码时,它会询问我选择“GMail”,“BlueTooth”等应用程序的选项.但我希望在没有用户干预的情况下发送邮件.即使通过彩信发送也会对我有好处.有人可以建议我怎么做吗?
解决方法
您需要在项目中包含java邮件库和依赖项,然后编写一个类似下面的帮助程序类.
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 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 = 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"); } } }
JSSEProvider类
@SuppressWarnings("serial") public final class JSSEProvider extends Provider { public JSSEProvider() { super("HarmonyJSSE",1.0,"Harmony JSSE Provider"); AccessController.doPrivileged(new java.security.PrivilegedAction() { 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; } }); } }
然后发送电子邮件就像这样简单
GMailSender sender = new GMailSender("username","password"); sender.sendMail("subject",body,"sender",recipients);