Многим наверно приходила в голову мысль о том что отправка из приложения писем на e-mail была бы весьма кстати. К примеру в качестве фидбека о работе программы, или с регистрационными данными, да мало ли для чего еще. Так и мне при разработке программы захотелось получать сообщения с ошибками в программе, так как будучи инди-разработчиком, под рукой имею десяток-другой наиболее распространенных телефонов, и провести крупномасштабное тестирование на широком диапазоне аппаратов, особенно новых, не так то просто. Поэтому механизм уведомлений о ошибках был бы весьма кстати, как минимум на этапе бета-тестирования. Покопавшись в сети нашел несколько библиотек для работы с электронной почтой, в том числе с mobilab'а. Но сколько бы не старался, у меня так и не получилось отправить письмо, хотя демки работали. А время поджимало.
Как гласит народная мудрость,
Хочешь сделать хорошо-сделай сам
Я нашел на этом сайте исходники почтового клиента, и хотя бы он заработал. Но к сожалению обнаружил проблемы с кодировкой спецсимволов и кириллицы. Пришлось на скорую добавить свой кодировщик строк. Оформил всё в библиотеку, написал класс для работы с ней и добавил в приложение. Сначала это был отдельный пункт, из которого пользователи могли в случае чего отправлять сообщения, которые приходили мне на почту.
Позже пришел к выводу что надежней будет автоматизировать это дело, заранее предупредив пользователей о сборе информации о ошибках.
В результате итоговый код отправки стал таким:
} catch (Exception ex ){
sendMail("main class","some method" , ex);
}
public void sendMail(string classname, String methodname, Exception e)
{
SendMail mail=new SendMail();
mail.setText(classname+":"+methodname+":"+ e.toString());
mail.start();
}
А письма у меня выгладят примерно так
И собственно обработчик-отправщик
import Mail.Connection;
import Mail.Decoder;
import Mail.Message;
import Mail.SmtpClient;
public class SendMail extends Thread {
String host = "smtp.mail.ru";
int port=25;
String adressfrom = "bugreport@mail.ru";
String pass = "123456";
String adressto = "s.komlach@gmail.com";
String subject = "Bugreport";
String text = "";
public void run() {
try {
String string = Decoder.encode(text, false);
SmtpClient smtpclient = new SmtpClient(new Connection());
smtpclient.open(host, port, adressfrom, pass);
Message message = new Message(adressfrom, adressto, Decoder.encode(subject), true));
message.addHeaderLine("X-mailer: 1.0");
message.addHeaderLine("Content-Type: text/plain; charset=UTF-8");
message.addHeaderLine("Content-Transfer-Encoding: quoted-printable");
message.addBodyLine(String.valueOf(string).concat("rn"));
smtpclient.sendMessage(message);
smtpclient.close();
} catch (Exception exception) {
}
}
public void setText(String text) {
this.text = text;
}
}
Ну и исходники библиотеки goo.gl/oVv8e
Автор: SergejKomlach