Skip to content

Commit a25ba3e

Browse files
committed
新增:邮件发送支持IMAP协议(界面部分)
1 parent bb2d028 commit a25ba3e

File tree

7 files changed

+157
-62
lines changed

7 files changed

+157
-62
lines changed

app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,9 @@ private void setEmail(final SenderModel senderModel) {
362362
final EditText editTextEmailPsw = view1.findViewById(R.id.editTextEmailPsw);
363363
final EditText editTextEmailToAdd = view1.findViewById(R.id.editTextEmailToAdd);
364364
final EditText editTextEmailTitle = view1.findViewById(R.id.editTextEmailTitle);
365+
final RadioGroup radioGroupEmailProtocol = view1.findViewById(R.id.radioGroupEmailProtocol);
365366
if (emailSettingVo != null) {
367+
radioGroupEmailProtocol.check(emailSettingVo.getEmailProtocolCheckId());
366368
editTextEmailHost.setText(emailSettingVo.getHost());
367369
editTextEmailPort.setText(emailSettingVo.getPort());
368370
switchEmailSSl.setChecked(emailSettingVo.getSsl());
@@ -384,21 +386,31 @@ private void setEmail(final SenderModel senderModel) {
384386
final AlertDialog show = alertDialog71.show();
385387

386388
buttonEmailOk.setOnClickListener(view -> {
389+
String protocol = radioGroupEmailProtocol.getCheckedRadioButtonId() == R.id.radioEmailProtocolSmtp ? "SMTP" : "IMAP";
390+
String host = editTextEmailHost.getText().toString().trim();
391+
String port = editTextEmailPort.getText().toString().trim();
392+
boolean ssl = switchEmailSSl.isChecked();
393+
String fromEmail = editTextEmailFromAdd.getText().toString().trim();
394+
String pwd = editTextEmailPsw.getText().toString().trim();
395+
String toEmail = editTextEmailToAdd.getText().toString().trim();
396+
397+
String title = editTextEmailTitle.getText().toString().trim();
398+
if (title.isEmpty()) title = "SmsForwarder Title";
399+
400+
String nickname = editTextEmailNickname.getText().toString().trim();
401+
if (nickname.isEmpty()) nickname = "SmsForwarder";
402+
if (host.isEmpty() || port.isEmpty() || fromEmail.isEmpty() || pwd.isEmpty() || toEmail.isEmpty()) {
403+
Toast.makeText(SenderActivity.this, R.string.invalid_email, Toast.LENGTH_LONG).show();
404+
return;
405+
}
406+
407+
EmailSettingVo emailSettingVoNew = new EmailSettingVo(protocol, host, port, ssl, fromEmail, nickname, pwd, toEmail, title);
408+
387409
if (senderModel == null) {
388410
SenderModel newSenderModel = new SenderModel();
389411
newSenderModel.setName(editTextEmailName.getText().toString().trim());
390412
newSenderModel.setType(TYPE_EMAIL);
391413
newSenderModel.setStatus(STATUS_ON);
392-
EmailSettingVo emailSettingVoNew = new EmailSettingVo(
393-
editTextEmailHost.getText().toString().trim(),
394-
editTextEmailPort.getText().toString().trim(),
395-
switchEmailSSl.isChecked(),
396-
editTextEmailFromAdd.getText().toString().trim(),
397-
editTextEmailNickname.getText().toString().trim(),
398-
editTextEmailPsw.getText().toString().trim(),
399-
editTextEmailToAdd.getText().toString().trim(),
400-
editTextEmailTitle.getText().toString().trim()
401-
);
402414
newSenderModel.setJsonSetting(JSON.toJSONString(emailSettingVoNew));
403415
SenderUtil.addSender(newSenderModel);
404416
initSenders();
@@ -407,16 +419,6 @@ private void setEmail(final SenderModel senderModel) {
407419
senderModel.setName(editTextEmailName.getText().toString().trim());
408420
senderModel.setType(TYPE_EMAIL);
409421
senderModel.setStatus(STATUS_ON);
410-
EmailSettingVo emailSettingVoNew = new EmailSettingVo(
411-
editTextEmailHost.getText().toString().trim(),
412-
editTextEmailPort.getText().toString().trim(),
413-
switchEmailSSl.isChecked(),
414-
editTextEmailFromAdd.getText().toString().trim(),
415-
editTextEmailNickname.getText().toString().trim(),
416-
editTextEmailPsw.getText().toString().trim(),
417-
editTextEmailToAdd.getText().toString().trim(),
418-
editTextEmailTitle.getText().toString().trim()
419-
);
420422
senderModel.setJsonSetting(JSON.toJSONString(emailSettingVoNew));
421423
SenderUtil.updateSender(senderModel);
422424
initSenders();
@@ -434,6 +436,7 @@ private void setEmail(final SenderModel senderModel) {
434436
show.dismiss();
435437
});
436438
buttonEmailTest.setOnClickListener(view -> {
439+
String protocol = radioGroupEmailProtocol.getCheckedRadioButtonId() == R.id.radioEmailProtocolSmtp ? "SMTP" : "IMAP";
437440
String host = editTextEmailHost.getText().toString().trim();
438441
String port = editTextEmailPort.getText().toString().trim();
439442
boolean ssl = switchEmailSSl.isChecked();
@@ -449,7 +452,7 @@ private void setEmail(final SenderModel senderModel) {
449452

450453
if (!host.isEmpty() && !port.isEmpty() && !fromEmail.isEmpty() && !pwd.isEmpty() && !toEmail.isEmpty()) {
451454
try {
452-
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())));
455+
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())));
453456
} catch (Exception e) {
454457
Toast.makeText(SenderActivity.this, getString(R.string.failed_to_fwd) + e.getMessage(), Toast.LENGTH_LONG).show();
455458
e.printStackTrace();

app/src/main/java/com/idormy/sms/forwarder/model/vo/EmailSettingVo.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.idormy.sms.forwarder.model.vo;
22

3+
import com.idormy.sms.forwarder.R;
4+
35
import java.io.Serializable;
46

57
import lombok.Data;
@@ -14,11 +16,13 @@ public class EmailSettingVo implements Serializable {
1416
private String pwd;
1517
private String toEmail;
1618
private String title;
19+
private String protocol;
1720

1821
public EmailSettingVo() {
1922
}
2023

21-
public EmailSettingVo(String host, String port, Boolean ssl, String fromEmail, String nickname, String pwd, String toEmail, String title) {
24+
public EmailSettingVo(String protocol, String host, String port, Boolean ssl, String fromEmail, String nickname, String pwd, String toEmail, String title) {
25+
this.protocol = protocol;
2226
this.host = host;
2327
this.port = port;
2428
this.ssl = ssl;
@@ -29,4 +33,11 @@ public EmailSettingVo(String host, String port, Boolean ssl, String fromEmail, S
2933
this.title = title;
3034
}
3135

36+
public int getEmailProtocolCheckId() {
37+
if (protocol == null || protocol.equals("SMTP")) {
38+
return R.id.radioEmailProtocolSmtp;
39+
} else {
40+
return R.id.radioEmailProtocolImap;
41+
}
42+
}
3243
}

app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public static void senderSendMsg(Handler handError, SmsVo smsVo, SenderModel sen
132132
EmailSettingVo emailSettingVo = JSON.parseObject(senderModel.getJsonSetting(), EmailSettingVo.class);
133133
if (emailSettingVo != null) {
134134
try {
135-
SenderMailMsg.sendEmail(logId, handError, emailSettingVo.getHost(), emailSettingVo.getPort(), emailSettingVo.getSsl(), emailSettingVo.getFromEmail(), emailSettingVo.getNickname(),
135+
SenderMailMsg.sendEmail(logId, handError, emailSettingVo.getProtocol(), emailSettingVo.getHost(), emailSettingVo.getPort(), emailSettingVo.getSsl(), emailSettingVo.getFromEmail(), emailSettingVo.getNickname(),
136136
emailSettingVo.getPwd(), emailSettingVo.getToEmail(), smsVo.getTitleForSend(emailSettingVo.getTitle()), smsVo.getSmsVoForSend(smsTemplate));
137137
} catch (Exception e) {
138138
LogUtil.updateLog(logId, 0, e.getMessage());

app/src/main/java/com/idormy/sms/forwarder/sender/SenderMailMsg.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
public class SenderMailMsg extends SenderBaseMsg {
1919
private static final String TAG = "SenderMailMsg";
2020

21-
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) {
21+
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) {
2222

23-
Log.d(TAG, "sendEmail: host:" + host + " port:" + port + " ssl:" + ssl + " fromEmail:" + fromEmail + " nickname:" + nickname + " pwd:" + pwd + " toAdd:" + toAdd);
23+
Log.d(TAG, "sendEmail: protocol:" + protocol + " host:" + host + " port:" + port + " ssl:" + ssl + " fromEmail:" + fromEmail + " nickname:" + nickname + " pwd:" + pwd + " toAdd:" + toAdd);
2424

2525
Observable
2626
.create((ObservableEmitter<Object> emitter) -> {

app/src/main/res/layout/alert_dialog_setview_email.xml

Lines changed: 101 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,16 @@
3333
tools:ignore="LabelFor,TextFields" />
3434
</LinearLayout>
3535

36+
<TextView
37+
android:layout_width="wrap_content"
38+
android:layout_height="wrap_content"
39+
android:layout_marginTop="10dp"
40+
android:layout_marginStart="10dp"
41+
android:text="@string/account"
42+
android:textSize="14sp"
43+
android:textColor="@color/colorBlueGreyDark"
44+
tools:ignore="HardcodedText" />
45+
3646
<LinearLayout
3747
android:layout_width="match_parent"
3848
android:layout_height="match_parent"
@@ -43,18 +53,18 @@
4353
<TextView
4454
android:layout_width="wrap_content"
4555
android:layout_height="wrap_content"
46-
android:text="@string/email_host" />
56+
android:text="@string/email_account" />
4757

4858
<EditText
49-
android:id="@+id/editTextEmailHost"
59+
android:id="@+id/editTextEmailFromAdd"
5060
android:layout_width="wrap_content"
5161
android:layout_height="wrap_content"
5262
android:layout_marginStart="3dp"
5363
android:autofillHints=""
5464
android:ems="14"
55-
android:inputType="text"
65+
android:inputType="textEmailAddress"
5666
android:text=""
57-
tools:ignore="LabelFor,TextFields" />
67+
tools:ignore="LabelFor" />
5868
</LinearLayout>
5969

6070
<LinearLayout
@@ -67,54 +77,91 @@
6777
<TextView
6878
android:layout_width="wrap_content"
6979
android:layout_height="wrap_content"
70-
android:text="@string/smtp_port" />
80+
android:text="@string/email_password" />
7181

7282
<EditText
73-
android:id="@+id/editTextEmailPort"
83+
android:id="@+id/editTextEmailPsw"
7484
android:layout_width="wrap_content"
7585
android:layout_height="wrap_content"
7686
android:layout_marginStart="3dp"
7787
android:autofillHints=""
78-
android:ems="5"
79-
android:inputType="text"
88+
android:ems="14"
89+
android:inputType="textPassword"
8090
android:text=""
8191
tools:ignore="LabelFor,TextFields" />
92+
</LinearLayout>
93+
94+
<LinearLayout
95+
android:layout_width="match_parent"
96+
android:layout_height="match_parent"
97+
android:layout_marginLeft="10dp"
98+
android:layout_marginRight="10dp"
99+
android:orientation="horizontal">
82100

83101
<TextView
84102
android:layout_width="wrap_content"
85103
android:layout_height="wrap_content"
86-
android:text="@string/enable_ssl" />
104+
android:text="@string/email_nickname" />
87105

88-
<Switch
89-
android:id="@+id/switchEmailSSl"
106+
<EditText
107+
android:id="@+id/editTextEmailNickname"
90108
android:layout_width="wrap_content"
91109
android:layout_height="wrap_content"
92-
android:checked="true"
93-
tools:ignore="UseSwitchCompatOrMaterialXml" />
110+
android:layout_marginStart="3dp"
111+
android:autofillHints=""
112+
android:ems="14"
113+
android:inputType="text"
114+
android:text=""
115+
tools:ignore="LabelFor,TextFields" />
94116
</LinearLayout>
95117

118+
<TextView
119+
android:layout_width="wrap_content"
120+
android:layout_height="wrap_content"
121+
android:layout_marginTop="10dp"
122+
android:layout_marginStart="10dp"
123+
android:text="@string/servers"
124+
android:textSize="14sp"
125+
android:textColor="@color/colorBlueGreyDark"
126+
tools:ignore="HardcodedText" />
127+
96128
<LinearLayout
97129
android:layout_width="match_parent"
98130
android:layout_height="match_parent"
99131
android:layout_marginLeft="10dp"
100132
android:layout_marginRight="10dp"
101-
android:orientation="horizontal">
133+
android:layout_marginTop="5dp"
134+
android:orientation="horizontal"
135+
android:visibility="gone">
102136

103137
<TextView
104138
android:layout_width="wrap_content"
105139
android:layout_height="wrap_content"
106-
android:text="@string/email_account" />
140+
android:paddingTop="5dp"
141+
android:text="@string/email_protocol" />
107142

108-
<EditText
109-
android:id="@+id/editTextEmailFromAdd"
143+
<RadioGroup
144+
android:id="@+id/radioGroupEmailProtocol"
110145
android:layout_width="wrap_content"
111146
android:layout_height="wrap_content"
112147
android:layout_marginStart="3dp"
113-
android:autofillHints=""
114-
android:ems="14"
115-
android:inputType="textEmailAddress"
116-
android:text=""
117-
tools:ignore="LabelFor" />
148+
android:orientation="horizontal">
149+
150+
<RadioButton
151+
android:id="@+id/radioEmailProtocolSmtp"
152+
android:layout_width="wrap_content"
153+
android:layout_height="wrap_content"
154+
android:checked="true"
155+
android:text="@string/email_smtp" />
156+
157+
<RadioButton
158+
android:id="@+id/radioEmailProtocolImap"
159+
android:layout_width="wrap_content"
160+
android:layout_height="wrap_content"
161+
android:text="@string/email_imap" />
162+
163+
</RadioGroup>
164+
118165
</LinearLayout>
119166

120167
<LinearLayout
@@ -127,10 +174,10 @@
127174
<TextView
128175
android:layout_width="wrap_content"
129176
android:layout_height="wrap_content"
130-
android:text="@string/email_nickname" />
177+
android:text="@string/email_host" />
131178

132179
<EditText
133-
android:id="@+id/editTextEmailNickname"
180+
android:id="@+id/editTextEmailHost"
134181
android:layout_width="wrap_content"
135182
android:layout_height="wrap_content"
136183
android:layout_marginStart="3dp"
@@ -151,20 +198,42 @@
151198
<TextView
152199
android:layout_width="wrap_content"
153200
android:layout_height="wrap_content"
154-
android:text="@string/email_password" />
201+
android:text="@string/smtp_port" />
155202

156203
<EditText
157-
android:id="@+id/editTextEmailPsw"
204+
android:id="@+id/editTextEmailPort"
158205
android:layout_width="wrap_content"
159206
android:layout_height="wrap_content"
160207
android:layout_marginStart="3dp"
161208
android:autofillHints=""
162-
android:ems="14"
163-
android:inputType="textPassword"
209+
android:ems="5"
210+
android:inputType="text"
164211
android:text=""
165212
tools:ignore="LabelFor,TextFields" />
213+
214+
<TextView
215+
android:layout_width="wrap_content"
216+
android:layout_height="wrap_content"
217+
android:text="@string/enable_ssl" />
218+
219+
<Switch
220+
android:id="@+id/switchEmailSSl"
221+
android:layout_width="wrap_content"
222+
android:layout_height="wrap_content"
223+
android:checked="true"
224+
tools:ignore="UseSwitchCompatOrMaterialXml" />
166225
</LinearLayout>
167226

227+
<TextView
228+
android:layout_width="wrap_content"
229+
android:layout_height="wrap_content"
230+
android:layout_marginTop="10dp"
231+
android:layout_marginStart="10dp"
232+
android:text="@string/email"
233+
android:textSize="14sp"
234+
android:textColor="@color/colorBlueGreyDark"
235+
tools:ignore="HardcodedText" />
236+
168237
<LinearLayout
169238
android:layout_width="match_parent"
170239
android:layout_height="match_parent"
@@ -241,7 +310,7 @@
241310
android:layout_marginTop="5dp"
242311
android:layout_marginBottom="5dp"
243312
android:layout_weight="1"
244-
android:background="@color/colorPrimary"
313+
android:background="@color/colorBlueGrey"
245314
android:text="@string/insert_sender"
246315
tools:ignore="ButtonStyle,NestedWeights" />
247316

@@ -253,7 +322,7 @@
253322
android:layout_marginTop="5dp"
254323
android:layout_marginBottom="5dp"
255324
android:layout_weight="1"
256-
android:background="@color/colorPrimary"
325+
android:background="@color/colorBlueGrey"
257326
android:text="@string/insert_extra"
258327
tools:ignore="ButtonStyle,NestedWeights" />
259328

@@ -265,7 +334,7 @@
265334
android:layout_marginTop="5dp"
266335
android:layout_marginBottom="5dp"
267336
android:layout_weight="1"
268-
android:background="@color/colorPrimary"
337+
android:background="@color/colorBlueGrey"
269338
android:text="@string/insert_time"
270339
tools:ignore="ButtonStyle,NestedWeights" />
271340

@@ -277,7 +346,7 @@
277346
android:layout_marginTop="5dp"
278347
android:layout_marginBottom="5dp"
279348
android:layout_weight="1"
280-
android:background="@color/colorPrimary"
349+
android:background="@color/colorBlueGrey"
281350
android:text="@string/insert_device_name"
282351
tools:ignore="ButtonStyle,NestedWeights" />
283352

0 commit comments

Comments
 (0)