Pull to refresh

Отправляем письма из мидлета или Как я дистанционно отлавливал ошибки

Reading time2 min
Views1.1K
Многим наверно приходила в голову мысль о том что отправка из приложения писем на e-mail была бы весьма кстати. К примеру в качестве фидбека о работе программы, или с регистрационными данными, да мало ли для чего еще. Так и мне при разработке программы захотелось получать сообщения с ошибками в программе, так как будучи инди-разработчиком, под рукой имею десяток-другой наиболее распространенных телефонов, и провести крупномасштабное тестирование на широком диапазоне аппаратов, особенно новых, не так то просто. Поэтому механизм уведомлений о ошибках был бы весьма кстати, как минимум на этапе бета-тестирования. Покопавшись в сети нашел несколько библиотек для работы с электронной почтой, в том числе с mobilab'а. Но сколько бы не старался, у меня так и не получилось отправить письмо, хотя демки работали. А время поджимало.
Как гласит народная мудрость,

Хочешь сделать хорошо-сделай сам


Я нашел на этом сайте исходники почтового клиента, и хотя бы он заработал. Но к сожалению обнаружил проблемы с кодировкой спецсимволов и кириллицы. Пришлось на скорую добавить свой кодировщик строк. Оформил всё в библиотеку, написал класс для работы с ней и добавил в приложение. Сначала это был отдельный пункт, из которого пользователи могли в случае чего отправлять сообщения, которые приходили мне на почту.
image
Позже пришел к выводу что надежней будет автоматизировать это дело, заранее предупредив пользователей о сборе информации о ошибках.
image
В результате итоговый код отправки стал таким:

} 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();
}


А письма у меня выгладят примерно так
image

И собственно обработчик-отправщик

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.concat("\r\n"));

            smtpclient.sendMessage(message);
            smtpclient.close();

        } catch (Exception exception) {
        }


    }

    public void setText(String text) {
        this.text = text;

    }
}


Ну и исходники библиотеки goo.gl/oVv8e
Tags:
Hubs:
+6
Comments6

Articles