【问题标题】:Sending Email Via Kotlin通过 Kotlin 发送电子邮件
【发布时间】:2019-05-28 03:13:49
【问题描述】:

我正在使用下面的代码发送电子邮件,但它要求提供 gmail 凭据。我正在寻找一个类似于 mailx 的命令,可以在不要求任何凭据的情况下将电子邮件发送到特定地址。任何帮助表示赞赏。

代码

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val button: Button = findViewById(R.id.button)
        val editTextTo: EditText = findViewById(R.id.editTextTo)

        button.setOnClickListener(View.OnClickListener {
            val to = editTextTo.getText().toString()
            val subject = "Test"
            val message = "Test"

            val intent = Intent(Intent.ACTION_SEND)
            val addressees = arrayOf(to)
            intent.putExtra(Intent.EXTRA_EMAIL, addressees)
            intent.putExtra(Intent.EXTRA_SUBJECT, subject)
            intent.putExtra(Intent.EXTRA_TEXT, message)
            intent.setType("message/rfc822")
            startActivity(Intent.createChooser(intent, "Send Email using:"));
        })
    }
}

【问题讨论】:

  • 这不会发送电子邮件,它会打开安装了预填充数据的默认电子邮件应用程序,并且用户是发送电子邮件的人。
  • 它要求提供 Gmail 凭据,因为可能在没有配置帐户的情况下安装了 Gmail 应用程序,请尝试设置凭据并报告行为。
  • 有什么方法可以在没有 gmail 应用(如 unix 命令中的 mailx)的情况下发送电子邮件
  • 您可以使用JavaMail,但您将无法模拟用户,您需要使用自己的 SMPT 服务器
  • mailx 无法直接发送到 Gmail。如果 mailx 发送到您的本地邮件服务器,它只在没有密码的情况下工作,因为您在您的私人 Intranet 上,所以它信任您。如果公共互联网上有一个邮件服务器允许人们在没有密码的情况下发送电子邮件,你能想象垃圾邮件发送者会如何滥用它吗?在您的应用程序中包含您的 Gmail 帐户密码是有风险的,因为有人可能会发现它并滥用您的帐户。

标签: android android-studio email kotlin jakarta-mail


【解决方案1】:

有一个 java 解决方案尝试让你的 kotlin 成为一个(对不起,我不喜欢 Kotlin)。

将此添加到您的 gradle 中

implementation 'com.sun.mail:android-mail:1.6.0'
implementation 'com.sun.mail:android-activation:1.6.0'

并添加这两个classes 一个用于创建 SMTP 服务器,另一个用于安全目的,并像这样调用它:

GMailSender sender = new GMailSender(
                        "you_email@gmail.com",
                        "password");

sender.sendMail(subject, message,sender,recipients);

【讨论】:

  • 感谢@Oussema Aroua 的评论。我需要在这里输入密码吗?我正在处理提交表单数据后需要发送电子邮件的联系我们页面。如果我输入凭据,则它不安全。
  • 你需要输入电子邮件,我将加密的密码放在 gradle 文件中,然后在运行类型时解密
  • 在另一个应用程序中,我通过 Api 发送邮件
  • 我的日志中没有收到任何错误,但同时我也没有收到任何电子邮件。下面是代码大纲。类 MainActivity : AppCompatActivity() { 覆盖 fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val sender = GMailSender("contact@gmail.com", "Hello") val subject ="Test" val message="Test Message" val recipients="test@gmail.com" val button: Button = findViewById(R.id.button) button.setOnClickListener(View.OnClickListener { sender.sendMail(subject, message, sender.toString(), 收件人) }) }}
  • 我在网上遇到一个错误:Transport.send(message) in GMailSender class java.lang.VerifyError: Rejecting class com.sun.mail.handlers.text_plain that try to sub-type error class com.sun.mail.handlers.handler_base('com.sun.mail.handlers.text_plain' 的声明出现在 /data/app/~~r8aMnomVmYs6XTttCAzxuA==/com.checkmed.rider-jrpxzSTSRa0OvYPz9-bPDQ==/base. APK)
猜你喜欢
  • 2012-01-07
  • 2012-04-27
  • 2016-07-04
  • 2018-09-19
  • 2021-03-23
  • 2017-05-16
  • 2011-07-14
  • 2014-12-18
相关资源
最近更新 更多