新增:邮件发送支持IMAP协议(界面部分)

This commit is contained in:
pppscn 2021-11-25 17:44:02 +08:00
parent bb2d028b3c
commit a25ba3e22c
7 changed files with 200 additions and 105 deletions

View File

@ -362,7 +362,9 @@ public class SenderActivity extends AppCompatActivity {
final EditText editTextEmailPsw = view1.findViewById(R.id.editTextEmailPsw);
final EditText editTextEmailToAdd = view1.findViewById(R.id.editTextEmailToAdd);
final EditText editTextEmailTitle = view1.findViewById(R.id.editTextEmailTitle);
final RadioGroup radioGroupEmailProtocol = view1.findViewById(R.id.radioGroupEmailProtocol);
if (emailSettingVo != null) {
radioGroupEmailProtocol.check(emailSettingVo.getEmailProtocolCheckId());
editTextEmailHost.setText(emailSettingVo.getHost());
editTextEmailPort.setText(emailSettingVo.getPort());
switchEmailSSl.setChecked(emailSettingVo.getSsl());
@ -384,21 +386,31 @@ public class SenderActivity extends AppCompatActivity {
final AlertDialog show = alertDialog71.show();
buttonEmailOk.setOnClickListener(view -> {
String protocol = radioGroupEmailProtocol.getCheckedRadioButtonId() == R.id.radioEmailProtocolSmtp ? "SMTP" : "IMAP";
String host = editTextEmailHost.getText().toString().trim();
String port = editTextEmailPort.getText().toString().trim();
boolean ssl = switchEmailSSl.isChecked();
String fromEmail = editTextEmailFromAdd.getText().toString().trim();
String pwd = editTextEmailPsw.getText().toString().trim();
String toEmail = editTextEmailToAdd.getText().toString().trim();
String title = editTextEmailTitle.getText().toString().trim();
if (title.isEmpty()) title = "SmsForwarder Title";
String nickname = editTextEmailNickname.getText().toString().trim();
if (nickname.isEmpty()) nickname = "SmsForwarder";
if (host.isEmpty() || port.isEmpty() || fromEmail.isEmpty() || pwd.isEmpty() || toEmail.isEmpty()) {
Toast.makeText(SenderActivity.this, R.string.invalid_email, Toast.LENGTH_LONG).show();
return;
}
EmailSettingVo emailSettingVoNew = new EmailSettingVo(protocol, host, port, ssl, fromEmail, nickname, pwd, toEmail, title);
if (senderModel == null) {
SenderModel newSenderModel = new SenderModel();
newSenderModel.setName(editTextEmailName.getText().toString().trim());
newSenderModel.setType(TYPE_EMAIL);
newSenderModel.setStatus(STATUS_ON);
EmailSettingVo emailSettingVoNew = new EmailSettingVo(
editTextEmailHost.getText().toString().trim(),
editTextEmailPort.getText().toString().trim(),
switchEmailSSl.isChecked(),
editTextEmailFromAdd.getText().toString().trim(),
editTextEmailNickname.getText().toString().trim(),
editTextEmailPsw.getText().toString().trim(),
editTextEmailToAdd.getText().toString().trim(),
editTextEmailTitle.getText().toString().trim()
);
newSenderModel.setJsonSetting(JSON.toJSONString(emailSettingVoNew));
SenderUtil.addSender(newSenderModel);
initSenders();
@ -407,16 +419,6 @@ public class SenderActivity extends AppCompatActivity {
senderModel.setName(editTextEmailName.getText().toString().trim());
senderModel.setType(TYPE_EMAIL);
senderModel.setStatus(STATUS_ON);
EmailSettingVo emailSettingVoNew = new EmailSettingVo(
editTextEmailHost.getText().toString().trim(),
editTextEmailPort.getText().toString().trim(),
switchEmailSSl.isChecked(),
editTextEmailFromAdd.getText().toString().trim(),
editTextEmailNickname.getText().toString().trim(),
editTextEmailPsw.getText().toString().trim(),
editTextEmailToAdd.getText().toString().trim(),
editTextEmailTitle.getText().toString().trim()
);
senderModel.setJsonSetting(JSON.toJSONString(emailSettingVoNew));
SenderUtil.updateSender(senderModel);
initSenders();
@ -434,6 +436,7 @@ public class SenderActivity extends AppCompatActivity {
show.dismiss();
});
buttonEmailTest.setOnClickListener(view -> {
String protocol = radioGroupEmailProtocol.getCheckedRadioButtonId() == R.id.radioEmailProtocolSmtp ? "SMTP" : "IMAP";
String host = editTextEmailHost.getText().toString().trim();
String port = editTextEmailPort.getText().toString().trim();
boolean ssl = switchEmailSSl.isChecked();
@ -449,7 +452,7 @@ public class SenderActivity extends AppCompatActivity {
if (!host.isEmpty() && !port.isEmpty() && !fromEmail.isEmpty() && !pwd.isEmpty() && !toEmail.isEmpty()) {
try {
SenderMailMsg.sendEmail(0, handler, host, port, ssl, fromEmail, nickname, pwd, toEmail, title, R.string.test_content + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())));
SenderMailMsg.sendEmail(0, handler, protocol, host, port, ssl, fromEmail, nickname, pwd, toEmail, title, R.string.test_content + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())));
} catch (Exception e) {
Toast.makeText(SenderActivity.this, getString(R.string.failed_to_fwd) + e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();

View File

@ -1,5 +1,7 @@
package com.idormy.sms.forwarder.model.vo;
import com.idormy.sms.forwarder.R;
import java.io.Serializable;
import lombok.Data;
@ -14,11 +16,13 @@ public class EmailSettingVo implements Serializable {
private String pwd;
private String toEmail;
private String title;
private String protocol;
public EmailSettingVo() {
}
public EmailSettingVo(String host, String port, Boolean ssl, String fromEmail, String nickname, String pwd, String toEmail, String title) {
public EmailSettingVo(String protocol, String host, String port, Boolean ssl, String fromEmail, String nickname, String pwd, String toEmail, String title) {
this.protocol = protocol;
this.host = host;
this.port = port;
this.ssl = ssl;
@ -29,4 +33,11 @@ public class EmailSettingVo implements Serializable {
this.title = title;
}
public int getEmailProtocolCheckId() {
if (protocol == null || protocol.equals("SMTP")) {
return R.id.radioEmailProtocolSmtp;
} else {
return R.id.radioEmailProtocolImap;
}
}
}

View File

@ -132,7 +132,7 @@ public class SendUtil {
EmailSettingVo emailSettingVo = JSON.parseObject(senderModel.getJsonSetting(), EmailSettingVo.class);
if (emailSettingVo != null) {
try {
SenderMailMsg.sendEmail(logId, handError, emailSettingVo.getHost(), emailSettingVo.getPort(), emailSettingVo.getSsl(), emailSettingVo.getFromEmail(), emailSettingVo.getNickname(),
SenderMailMsg.sendEmail(logId, handError, emailSettingVo.getProtocol(), emailSettingVo.getHost(), emailSettingVo.getPort(), emailSettingVo.getSsl(), emailSettingVo.getFromEmail(), emailSettingVo.getNickname(),
emailSettingVo.getPwd(), emailSettingVo.getToEmail(), smsVo.getTitleForSend(emailSettingVo.getTitle()), smsVo.getSmsVoForSend(smsTemplate));
} catch (Exception e) {
LogUtil.updateLog(logId, 0, e.getMessage());

View File

@ -18,9 +18,9 @@ import io.reactivex.rxjava3.core.ObservableEmitter;
public class SenderMailMsg extends SenderBaseMsg {
private static final String TAG = "SenderMailMsg";
public static void sendEmail(final long logId, final Handler handError, final String host, final String port, final boolean ssl, final String fromEmail, final String nickname, final String pwd, final String toAdd, final String title, final String content) {
public static void sendEmail(final long logId, final Handler handError, final String protocol, final String host, final String port, final boolean ssl, final String fromEmail, final String nickname, final String pwd, final String toAdd, final String title, final String content) {
Log.d(TAG, "sendEmail: host:" + host + " port:" + port + " ssl:" + ssl + " fromEmail:" + fromEmail + " nickname:" + nickname + " pwd:" + pwd + " toAdd:" + toAdd);
Log.d(TAG, "sendEmail: protocol:" + protocol + " host:" + host + " port:" + port + " ssl:" + ssl + " fromEmail:" + fromEmail + " nickname:" + nickname + " pwd:" + pwd + " toAdd:" + toAdd);
Observable
.create((ObservableEmitter<Object> emitter) -> {

View File

@ -33,6 +33,137 @@
tools:ignore="LabelFor,TextFields" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginStart="10dp"
android:text="@string/account"
android:textSize="14sp"
android:textColor="@color/colorBlueGreyDark"
tools:ignore="HardcodedText" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/email_account" />
<EditText
android:id="@+id/editTextEmailFromAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="3dp"
android:autofillHints=""
android:ems="14"
android:inputType="textEmailAddress"
android:text=""
tools:ignore="LabelFor" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/email_password" />
<EditText
android:id="@+id/editTextEmailPsw"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="3dp"
android:autofillHints=""
android:ems="14"
android:inputType="textPassword"
android:text=""
tools:ignore="LabelFor,TextFields" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/email_nickname" />
<EditText
android:id="@+id/editTextEmailNickname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="3dp"
android:autofillHints=""
android:ems="14"
android:inputType="text"
android:text=""
tools:ignore="LabelFor,TextFields" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginStart="10dp"
android:text="@string/servers"
android:textSize="14sp"
android:textColor="@color/colorBlueGreyDark"
tools:ignore="HardcodedText" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
android:orientation="horizontal"
android:visibility="gone">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:text="@string/email_protocol" />
<RadioGroup
android:id="@+id/radioGroupEmailProtocol"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="3dp"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radioEmailProtocolSmtp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/email_smtp" />
<RadioButton
android:id="@+id/radioEmailProtocolImap"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/email_imap" />
</RadioGroup>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -93,77 +224,15 @@
tools:ignore="UseSwitchCompatOrMaterialXml" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/email_account" />
<EditText
android:id="@+id/editTextEmailFromAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="3dp"
android:autofillHints=""
android:ems="14"
android:inputType="textEmailAddress"
android:text=""
tools:ignore="LabelFor" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/email_nickname" />
<EditText
android:id="@+id/editTextEmailNickname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="3dp"
android:autofillHints=""
android:ems="14"
android:inputType="text"
android:text=""
tools:ignore="LabelFor,TextFields" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/email_password" />
<EditText
android:id="@+id/editTextEmailPsw"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="3dp"
android:autofillHints=""
android:ems="14"
android:inputType="textPassword"
android:text=""
tools:ignore="LabelFor,TextFields" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginStart="10dp"
android:text="@string/email"
android:textSize="14sp"
android:textColor="@color/colorBlueGreyDark"
tools:ignore="HardcodedText" />
<LinearLayout
android:layout_width="match_parent"
@ -241,7 +310,7 @@
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:layout_weight="1"
android:background="@color/colorPrimary"
android:background="@color/colorBlueGrey"
android:text="@string/insert_sender"
tools:ignore="ButtonStyle,NestedWeights" />
@ -253,7 +322,7 @@
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:layout_weight="1"
android:background="@color/colorPrimary"
android:background="@color/colorBlueGrey"
android:text="@string/insert_extra"
tools:ignore="ButtonStyle,NestedWeights" />
@ -265,7 +334,7 @@
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:layout_weight="1"
android:background="@color/colorPrimary"
android:background="@color/colorBlueGrey"
android:text="@string/insert_time"
tools:ignore="ButtonStyle,NestedWeights" />
@ -277,7 +346,7 @@
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:layout_weight="1"
android:background="@color/colorPrimary"
android:background="@color/colorBlueGrey"
android:text="@string/insert_device_name"
tools:ignore="ButtonStyle,NestedWeights" />

View File

@ -122,8 +122,11 @@
<string name="dingding_token">Token e.g. the XXXXXX part of https://oapi.dingtalk.com/robot/send?access_token=XXXXXX</string>
<string name="dingding_secret">Secret (optional)</string>
<string name="dingding_at">At Mobiles e.g. 18888888888,19999999999</string>
<string name="email_host">SMTP Host</string>
<string name="smtp_port">SMTP Port</string>
<string name="email_protocol">Protocol</string>
<string name="email_smtp">SMTP</string>
<string name="email_imap">IMAP </string>
<string name="email_host">Server Host</string>
<string name="smtp_port">Server Port</string>
<string name="enable_ssl">SSL</string>
<string name="email_account">Account</string>
<string name="email_password">Password/Auth Code</string>
@ -238,4 +241,7 @@
<string name="pushplus_callback">Callback Url</string>
<string name="pushplus_valid_time">Valid time(secs)</string>
<string name="wechat">wechat</string>
<string name="account">✱Account</string>
<string name="servers">✱Servers</string>
<string name="email">✱Email</string>
</resources>

View File

@ -122,10 +122,13 @@
<string name="dingding_token">设置Token 例如 https://oapi.dingtalk.com/robot/send?access_token=XXXXXX 中的 XXXXXX</string>
<string name="dingding_secret">加签 Secret (没有可不填)</string>
<string name="dingding_at">转发时@某人 填写某人的手机号,多个用逗号分开 例如18888888888,19999999999</string>
<string name="email_host">SMTP服务器</string>
<string name="smtp_port">SMTP端口</string>
<string name="email_protocol">协议类型</string>
<string name="email_smtp">SMTP</string>
<string name="email_imap">IMAP</string>
<string name="email_host">服务器地址</string>
<string name="smtp_port">服务器端口</string>
<string name="enable_ssl">开启SSL</string>
<string name="email_account">发件人帐号</string>
<string name="email_account">发件人邮箱</string>
<string name="email_password">登录密码/授权码</string>
<string name="email_nickname">发件人昵称</string>
<string name="email_to">收件地址</string>
@ -237,4 +240,7 @@
<string name="pushplus_callback">回调地址</string>
<string name="pushplus_valid_time">有效时间(秒)</string>
<string name="wechat">wechat</string>
<string name="account">✱帐户管理</string>
<string name="servers">✱服务器信息</string>
<string name="email">✱邮件设置</string>
</resources>