在android中使用SMTP无意图发送邮件

2024-04-06

您好,我正在开发一个 Android 应用程序,只需单击按钮即可发送邮件。代码最初可以工作,但由于某种原因现在无法工作。有人可以帮我解决这个问题吗?[电子邮件受保护] /cdn-cgi/l/email-protection是收件人。[电子邮件受保护] /cdn-cgi/l/email-protection是发件人。我已经对邮件的主题和正文进行了硬编码。

package com.example.clc_construction;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import android.app.Activity;
import android.app.ProgressDialog;  
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;


public class Email extends Activity
{
public String jobNo;
public String teamNo;
private static final String username = "[email protected] /cdn-cgi/l/email-protection";
private static final String password = "000000";
private static final String emailid = "[email protected] /cdn-cgi/l/email-protection";
private static final String subject = "Photo";
private static final String message = "Hello";
private Multipart multipart = new MimeMultipart();
private MimeBodyPart messageBodyPart = new MimeBodyPart();
public File mediaFile;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.camera_screen);
    Intent intent = getIntent();
    jobNo = intent.getStringExtra("Job_No");
    teamNo = intent.getStringExtra("Team_No"); 
    sendMail(emailid,subject,message);

}
private void sendMail(String email, String subject, String messageBody)
 {
        Session session = createSessionObject();

        try {
            Message message = createMessage(email, subject, messageBody, session);
            new SendMailTask().execute(message);
        }
        catch (AddressException e)
        {
            e.printStackTrace();
        }
        catch (MessagingException e)
        {
            e.printStackTrace();
        }
        catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
        }
    }


private Session createSessionObject()
{
    Properties properties = new Properties();
    properties.put("mail.smtp.auth", "true");
    properties.put("mail.smtp.starttls.enable", "true");
    properties.put("mail.smtp.host", "smtp.gmail.com");
    properties.put("mail.smtp.port", "587");

    return Session.getInstance(properties, new javax.mail.Authenticator()
    {
        protected PasswordAuthentication getPasswordAuthentication()
        {
            return new PasswordAuthentication(username, password);
        }
    });
}

private Message createMessage(String email, String subject, String messageBody, Session session) throws 

MessagingException, UnsupportedEncodingException
{
    Message message = new MimeMessage(session);
    message.setFrom(new InternetAddress("[email protected] /cdn-cgi/l/email-protection", "Naveed Qureshi"));
    message.addRecipient(Message.RecipientType.TO, new InternetAddress(email, email));
    message.setSubject(subject);
    message.setText(messageBody);
    return message;
}



public class SendMailTask extends AsyncTask<Message, Void, Void>
{
    private ProgressDialog progressDialog;

    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();
        progressDialog = ProgressDialog.show(Email.this, "Please wait", "Sending mail", true, false);
    }

    @Override
    protected void onPostExecute(Void aVoid)
    {
        super.onPostExecute(aVoid);
        progressDialog.dismiss();
    }

    protected Void doInBackground(javax.mail.Message... messages)
    {
        try
        {
            Transport.send(messages[0]);
        } catch (MessagingException e)
        {
            e.printStackTrace();
        }
        return null;
    }
}
}

放入你的清单文件中,

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

检查您是否有互联网连接,

public boolean isOnline() {
    ConnectivityManager cm =
        (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
        return true;
    }
    return false;
}

最后使用此代码发送电子邮件

final String username = "[email protected] /cdn-cgi/l/email-protection";
final String password = "password";

Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");

Session session = Session.getInstance(props,
  new javax.mail.Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password);
    }
  });
    try {
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress("[email protected] /cdn-cgi/l/email-protection"));
        message.setRecipients(Message.RecipientType.TO,
            InternetAddress.parse("[email protected] /cdn-cgi/l/email-protection"));
        message.setSubject("Testing Subject");
        message.setText("Dear Mail Crawler,"
            + "\n\n No spam to my email, please!");

        MimeBodyPart messageBodyPart = new MimeBodyPart();

        Multipart multipart = new MimeMultipart();

        messageBodyPart = new MimeBodyPart();
        String file = "path of file to be attached";
        String fileName = "attachmentName"
        DataSource source = new FileDataSource(file);
        messageBodyPart.setDataHandler(new DataHandler(source));
        messageBodyPart.setFileName(fileName);
        multipart.addBodyPart(messageBodyPart);

        message.setContent(multipart);

        Transport.send(message);

        System.out.println("Done");

    } catch (MessagingException e) {
        throw new RuntimeException(e);
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在android中使用SMTP无意图发送邮件 的相关文章

随机推荐

  • Rubocop 仅检查修改的行

    我想在终端上仅针对我在 git 版本化项目中修改的行运行 rubocop 目前 通过谷歌搜索 我看到了适用于整个修改文件的脚本 I found this https gist github com skanev 9d4bec97d5a682
  • Google 网络字体与实际字体文件 - 适用于所有设备

    我正在寻找使用 Josefin Sans 它已列在 Google 网络字体中 我还有 eot svg ttf 和 woff 这意味着与文件完全兼容 据我所知 我的主要问题是 哪个更好 Google 字体加载速度更快吗 是不是更加兼容呢 或者
  • 在 Go 函数中返回本地数组的切片安全吗?

    如果我返回作为函数或方法的局部变量的数组切片 会发生什么情况 Go 是否将数组数据复制到创建的切片中make 容量与切片大小或数组大小匹配吗 func foo uint64 var tmp 100 uint64 end 0 for tmp
  • 无法使用可选参数推断泛型类型

    给定以下方法签名 为什么当显式命名参数时编译器无法自动推断类型 Visual Studio 2010 SP1 能够推断类型并且不会显示任何警告或错误 IEnumerable
  • 屏幕抓取:正则表达式还是 XQuery 表达式?

    我正在回答一些面试的测验问题 问题是关于我如何进行屏幕抓取 也就是说 假设您没有更好的结构化方法来直接查询信息 例如网络服务 则从网页中挑选内容 我的解决方案是使用XQuery表达 该表达式相当长 因为我需要的内容在 HTML 层次结构中相
  • 托管带有数据库的 asp.net 网站

    我在Microsoft Visual Studio 2010的帮助下创建了一个asp net网站 项目 各个项目的数据库是在Microsoft SQL Server Management Studio 2008的帮助下设计的 现在我想在互联
  • Azure 服务总线 1.1 无法启动

    服务总线网关未启动 首先 我尝试完全卸载所有Azure Fabric Service Bus类型的SDK和安装 我已经安装了两个Windows Azure Pack Service Bus 1 1 and Windows Azure Pac
  • Safari Web 扩展中后台服务工作人员发出 HTTP 请求期间出现 CORS 问题

    链接到 Xcode 项目的存储库来测试问题 测试 CORS 问题 https github com nick kadutskyi safari ext cors issue 这个扩展使用 Manifest v3 我有example com
  • 如何 grep 或搜索 OpenSSL 的 .jar 文件?

    我有一个 Android 应用程序正在使用一些 jar 文件 库 我的应用程序因 OpenSSL 漏洞而被拒绝 但找不到包含 OpenSSL 的 jar 文件 如何在我的 MAC 上搜索 Openssl 的 jar 文件 grep Open
  • 解决 Scala 中不明确的隐式转换

    有什么方法可以选择在下面使用 asJavaIterable 吗 我知道我可以拼出该特定的函数名称 但我想知道是否可以声明性地指定我想要的类型 我也很好奇为什么 asJavaIterable 不优先于 asJavaCollection sca
  • 通过通用代码将通知推送到各种设备

    我有一个要求 就是我必须将消息推送给使用 android 或 iphone 设备的各个用户 我知道将推送通知发送到 android 或 iphone 应用程序的各个流程 现在我的工作是我需要用java做服务器端实现 以便可以将消息发送到an
  • 想要使用 32 字节的 AES 256 CBC,但它显示 java.security.InvalidAlgorithmParameterException

    我正在使用 AES 256 CBC 我有 32 字节的 IV 但是当我运行它时 它显示一个异常 Exception in thread main java lang RuntimeException java security Invali
  • 聚焦动态创建的元素

    如何聚焦动态创建的元素 只需致电 focus https developer mozilla org en DOM element focus添加到 DOM 后的元素上 例如 var input document createElement
  • 如何获取滑块的值并实时更新?

    我有一个带有自定义控制栏的 HTML 视频标签 在其中我希望搜索栏和音量栏在用户浏览范围时实时更新其值 目前 音量在用户调整滑块后更新 而不是在用户单击并拖动时更新 在 HTML 中我将它们设置如下 div div
  • 通过 LINQ C# 根据单词出现情况进行复杂排序列表 [重复]

    这个问题在这里已经有答案了 可能的重复 通过 LINQ C 按单词出现次数对列表进行排序 https stackoverflow com questions 11392014 sort list by occurrence of a wor
  • Ofstream 创建但不会写入文件

    我编写了一些代码 执行基本的 fizzbuzz 程序来测试我的日志记录类 由于某种原因 数据被很好地转储到控制台 并且文件被创建得很好 但是每当我打开它时 日志文件都是空的 我的主要在这里 int main logger loggerObj
  • 查找数组中重复次数最多的对象

    我有一个充满字符串的数组 每个字符串都是一个名称 有些名称可能相同 有些可能不同 我正在使用的语言是 Objective C 我希望能够从该数组中找出哪个名称最受欢迎 该数组将根据用户提供给应用程序的信息是动态的 我不知道如何有效地实现这一
  • 使用用户名和密码在 C# 中启动进程会引发“访问被拒绝”异常

    在运行模拟的 NET 3 5 Web 应用程序中 我尝试通过以下方式执行进程 var process new Process StartInfo CreateNoWindow true FileName someFileName Domai
  • 如何包含与其中的 OBJECT 文件同名的静态库?

    我正在开发一个 iPad 应用程序 其中包含 2 个第三方静态库 这两个库中的目标文件的名称相同 在构建应用程序时我得到 Apple Mach O id 错误 因为这两个库中的目标文件名称相同 如何解决这个问题呢 错误看起来像 ld dup
  • 在android中使用SMTP无意图发送邮件

    您好 我正在开发一个 Android 应用程序 只需单击按钮即可发送邮件 代码最初可以工作 但由于某种原因现在无法工作 有人可以帮我解决这个问题吗 电子邮件受保护 cdn cgi l email protection是收件人 电子邮件受保护