From f029048d09fe23c46640dd09799de74b46d552ea Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Fri, 15 Nov 2024 14:27:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=87=E7=BA=A7=EF=BC=9A`android-mail`?= =?UTF-8?q?=E5=8D=87=E7=BA=A7=E4=B8=BA`jakarta.mail`=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=EF=BC=9A=E6=B7=BB=E5=8A=A0iCloud=E9=82=AE=E7=AE=B1=E6=94=AF?= =?UTF-8?q?=E6=8C=81=20#541?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 9 ++++--- .../sms/forwarder/utils/mail/EmailSender.kt | 15 +++++++---- .../sms/forwarder/utils/mail/PgpUtils.kt | 25 +++++++++---------- .../sms/forwarder/utils/mail/SmimeUtils.kt | 25 ++++++++++--------- .../sms/forwarder/utils/sender/EmailUtils.kt | 10 +++++++- app/src/main/res/values/arrays.xml | 3 ++- gradle.properties | 4 +-- 7 files changed, 53 insertions(+), 38 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a46eafa5..f22d5ffb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -346,9 +346,10 @@ dependencies { //语种切换框架:https://github.com/getActivity/MultiLanguages implementation 'com.github.getActivity:MultiLanguages:b47f7be' //9.3 - def mail_version = '1.6.7' - implementation "com.sun.mail:android-mail:$mail_version" - implementation "com.sun.mail:android-activation:$mail_version" + // https://jakartaee.github.io/mail-api/Android + def mail_version = '2.0.1' + implementation "com.sun.mail:jakarta.mail:$mail_version" + implementation "com.sun.activation:jakarta.activation:$mail_version" //国密算法SM4 的JAVA实现(基于BC实现) def bouncycastle_version = '1.77' @@ -396,4 +397,4 @@ static def getGitCommitId() { e.printStackTrace() return "" } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/mail/EmailSender.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/mail/EmailSender.kt index 2b76411f..7a52f8d5 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/mail/EmailSender.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/mail/EmailSender.kt @@ -3,14 +3,16 @@ package com.idormy.sms.forwarder.utils.mail import android.text.Html import android.text.Spanned import com.idormy.sms.forwarder.utils.Log +import com.sun.mail.util.MailSSLSocketFactory +import jakarta.mail.Authenticator +import jakarta.mail.PasswordAuthentication import org.bouncycastle.openpgp.PGPPublicKeyRing import org.bouncycastle.openpgp.PGPSecretKeyRing import java.io.File import java.security.PrivateKey import java.security.cert.X509Certificate import java.util.Properties -import javax.mail.Authenticator -import javax.mail.PasswordAuthentication + @Suppress("PrivatePropertyName", "DEPRECATION") class EmailSender( @@ -32,7 +34,6 @@ class EmailSender( private val listener: EmailTaskListener? = null, // 安全选项 private val openSSL: Boolean = false, //是否开启ssl验证 默认关闭 - private val sslFactory: String = "javax.net.ssl.SSLSocketFactory", //SSL构建类名 private val startTls: Boolean = false, //是否开启starttls加密方式 默认关闭 // 邮件加密方式: S/MIME、OpenPGP、Plain(不传证书) private val encryptionProtocol: String = "S/MIME", @@ -58,7 +59,11 @@ class EmailSender( // 设置是否启用 SSL 连接 if (openSSL) { put("mail.smtp.ssl.enable", "true") - put("mail.smtp.socketFactory.class", sslFactory) + // 使用 TLSv1.2 协议 & 信任所有主机 + val sf = MailSSLSocketFactory("TLSv1.2") + sf.setTrustedHosts("*") + put("mail.smtp.ssl.socketFactory", sf) + put("mail.smtp.ssl.protocols", "TLSv1.2") } // 设置是否启用 TLS 连接 if (startTls) { @@ -171,4 +176,4 @@ class EmailSender( return PasswordAuthentication(userName, password) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/mail/PgpUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/mail/PgpUtils.kt index dcb8f7ca..ba27673a 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/mail/PgpUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/mail/PgpUtils.kt @@ -1,6 +1,18 @@ package com.idormy.sms.forwarder.utils.mail import com.idormy.sms.forwarder.utils.Log +import jakarta.activation.DataHandler +import jakarta.activation.FileDataSource +import jakarta.mail.Authenticator +import jakarta.mail.Message +import jakarta.mail.Session +import jakarta.mail.Transport +import jakarta.mail.internet.InternetAddress +import jakarta.mail.internet.MimeBodyPart +import jakarta.mail.internet.MimeMessage +import jakarta.mail.internet.MimeMultipart +import jakarta.mail.internet.MimeUtility +import jakarta.mail.util.ByteArrayDataSource import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import org.bouncycastle.jce.provider.BouncyCastleProvider @@ -22,18 +34,6 @@ import java.io.InputStream import java.security.Security import java.util.Date import java.util.Properties -import javax.activation.DataHandler -import javax.activation.FileDataSource -import javax.mail.Authenticator -import javax.mail.Message -import javax.mail.Session -import javax.mail.Transport -import javax.mail.internet.InternetAddress -import javax.mail.internet.MimeBodyPart -import javax.mail.internet.MimeMessage -import javax.mail.internet.MimeMultipart -import javax.mail.internet.MimeUtility -import javax.mail.util.ByteArrayDataSource @Suppress("PrivatePropertyName") @@ -244,4 +244,3 @@ class PgpUtils( } } - diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/mail/SmimeUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/mail/SmimeUtils.kt index b14328e0..70b9151e 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/mail/SmimeUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/mail/SmimeUtils.kt @@ -1,6 +1,17 @@ package com.idormy.sms.forwarder.utils.mail import com.idormy.sms.forwarder.utils.Log +import jakarta.activation.DataHandler +import jakarta.activation.FileDataSource +import jakarta.mail.Authenticator +import jakarta.mail.Message +import jakarta.mail.Session +import jakarta.mail.Transport +import jakarta.mail.internet.InternetAddress +import jakarta.mail.internet.MimeBodyPart +import jakarta.mail.internet.MimeMessage +import jakarta.mail.internet.MimeMultipart +import jakarta.mail.internet.MimeUtility import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import org.bouncycastle.cert.jcajce.JcaCertStore @@ -24,17 +35,7 @@ import java.security.Security import java.security.cert.X509Certificate import java.util.Date import java.util.Properties -import javax.activation.DataHandler -import javax.activation.FileDataSource -import javax.mail.Authenticator -import javax.mail.Message -import javax.mail.Session -import javax.mail.Transport -import javax.mail.internet.InternetAddress -import javax.mail.internet.MimeBodyPart -import javax.mail.internet.MimeMessage -import javax.mail.internet.MimeMultipart -import javax.mail.internet.MimeUtility + @Suppress("PrivatePropertyName") class SmimeUtils( @@ -249,4 +250,4 @@ class SmimeUtils( return encryptedMessage } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/EmailUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/EmailUtils.kt index c9b68296..43ce1115 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/EmailUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/EmailUtils.kt @@ -137,6 +137,14 @@ class EmailUtils { setting.fromEmail += setting.mailType } + "@icloud.com" -> { + setting.host = "smtp.mail.me.com" + setting.port = "587" + setting.ssl = false + setting.startTls = true + setting.fromEmail += setting.mailType + } + else -> {} } @@ -346,4 +354,4 @@ class EmailUtils { } } -} \ No newline at end of file +} diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 5055fce0..4f7a2b5b 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -127,6 +127,7 @@ \@sina.cn \@139.com \@189.cn + \@icloud.com @string/other_mail_type @@ -142,4 +143,4 @@ UTF-32BE - \ No newline at end of file + diff --git a/gradle.properties b/gradle.properties index 3a27ffdd..03eccd5c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,14 +6,14 @@ # http://www.gradle.org/docs/current/userguide/build_environment.html # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true # 是否打包APK,打正式包时请设置为true,使用正式的签名 isNeedPackage=true -isNeedClean=false +isNeedClean=true # 是否排除Frpc动态库,打正式包时请设置为true excludeFrpclib=true # 是否使用leakcanary检测内存泄漏,打正式包时请设置为false