我在
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);