Improved partial send handling

pull/217/head
M66B 7 months ago
parent 484ef59c39
commit 7b3cd47106

@ -802,7 +802,7 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar
long start = 0;
long end = 0;
Long max_size = null;
SMTPSendFailedException partial = null;
SendFailedException partial = null;
if (ident.auth_type == AUTH_TYPE_GRAPH) {
start = new Date().getTime();
MicrosoftGraph.send(ServiceSend.this, ident, imessage);
@ -919,6 +919,36 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar
start = new Date().getTime();
try {
iservice.getTransport().sendMessage(imessage, rcptto);
} catch (SendFailedException ex) {
StringBuilder info = new StringBuilder();
List<String> failed = new ArrayList<>();
Address[] addresses = ex.getInvalidAddresses();
if (addresses != null)
for (Address address : addresses)
if (address instanceof InternetAddress) {
String email = ((InternetAddress) address).getAddress();
if (!TextUtils.isEmpty(email))
failed.add(email);
}
if (!failed.isEmpty())
info.append('\n').append("Invalid: ").append(TextUtils.join(", ", failed));
if (ex instanceof SMTPSendFailedException) {
SMTPSendFailedException e = (SMTPSendFailedException) ex;
if (info.length() > 0)
info.append('\n');
info.append("SMTP cmd=").append(e.getCommand())
.append(" rc=").append(e.getReturnCode());
}
throw new SendFailedException(
getString(R.string.title_service_auth, ex.getMessage()) + info,
ex.getNextException(),
ex.getValidSentAddresses(),
ex.getValidUnsentAddresses(),
ex.getInvalidAddresses());
} finally {
end = new Date().getTime();
}
@ -928,20 +958,13 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar
iservice.dump(ident.email);
Log.e(ex);
if (ex instanceof SMTPSendFailedException) {
SMTPSendFailedException sem = (SMTPSendFailedException) ex;
if (send_partial &&
sem.getInvalidAddresses() != null &&
sem.getValidSentAddresses() != null &&
sem.getValidUnsentAddresses() != null &&
sem.getValidSentAddresses().length > 0 &&
sem.getInvalidAddresses().length + sem.getValidUnsentAddresses().length > 0) {
partial = sem;
}
ex = new SMTPSendFailedException(
sem.getCommand(),
sem.getReturnCode(),
getString(R.string.title_service_auth, sem.getMessage()),
if (send_partial && ex instanceof SendFailedException) {
SendFailedException sem = (SendFailedException) ex;
int unsent = (sem.getValidUnsentAddresses() == null ? 0 : sem.getValidUnsentAddresses().length);
int invalid = (sem.getInvalidAddresses() == null ? 0 : sem.getInvalidAddresses().length);
if (unsent + invalid > 0)
partial = new SendFailedException(
getString(R.string.title_advanced_sent_partially) + "\n" + sem.getMessage(),
sem.getNextException(),
sem.getValidSentAddresses(),
sem.getValidUnsentAddresses(),
@ -976,12 +999,11 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar
if (partial == null)
db.message().deleteMessage(message.id);
else {
Throwable ex = new Throwable(getString(R.string.title_advanced_sent_partially), partial);
db.message().setMessageWarning(message.id, Log.formatThrowable(ex));
db.message().setMessageWarning(message.id, Log.formatThrowable(partial));
if (NotificationHelper.areNotificationsEnabled(nm)) {
NotificationCompat.Builder builder = getNotificationError(
MessageHelper.formatAddressesShort(message.to),
ex, 0);
partial, 0);
nm.notify("partial:" + message.id,
NotificationHelper.NOTIFICATION_TAGGED,
builder.build());
@ -1007,6 +1029,7 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar
DB.Converters.encodeAddresses(MessageHelper.removeAddresses(message.cc, unsent)));
db.message().setMessageBcc(sid,
DB.Converters.encodeAddresses(MessageHelper.removeAddresses(message.bcc, unsent)));
db.message().setMessageWarning(sid, Log.formatThrowable(partial));
}
db.message().setMessageReceived(sid, start);

Loading…
Cancel
Save