Android email no attachments

Отправка E-Mail средствами Android

Привет хабр и привет всем!

В данной статье я покажу как реализуется отправка писем средствами самого Android, а также ещё один более интересный способ, но уже с применением внешней библиотеки, которая позволяет нам отсылать письма более приемлимыми для программиста способами.

Часть 1. Mail, просто Mail

  1. public class SimpleEMail extends Activity <
  2. Button send;
  3. EditText address, subject, emailtext;
  4. @Override
  5. public void onCreate(Bundle savedInstanceState) <
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.simple_email);
  8. // Наши поля и кнопка
  9. send = (Button) findViewById(R.id.emailsendbutton);
  10. address = (EditText) findViewById(R.id.emailaddress);
  11. subject = (EditText) findViewById(R.id.emailsubject);
  12. emailtext = (EditText) findViewById(R.id.emailtext);
  13. send.setOnClickListener( new OnClickListener() <
  14. @Override
  15. public void onClick(View v) <
  16. final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
  17. emailIntent.setType( «plain/text» );
  18. // Кому
  19. emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
  20. new String [] < address.getText().toString() >);
  21. // Зачем
  22. emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
  23. subject.getText().toString());
  24. // О чём
  25. emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,
  26. emailtext.getText().toString());
  27. // С чем
  28. emailIntent.putExtra(
  29. android.content.Intent.EXTRA_STREAM,
  30. Uri .parse( «file://»
  31. + Environment.getExternalStorageDirectory()
  32. + «/Клипы/SOTY_ATHD.mp4» ));
  33. emailIntent.setType( «text/video» );
  34. // Поехали!
  35. SimpleEMail. this .startActivity(Intent.createChooser(emailIntent,
  36. «Отправка письма. » ));
  37. >
  38. >);
  39. >
  40. >

* This source code was highlighted with Source Code Highlighter .

Вот, код до безобразия прост. Правда можно еще проще: если нам лень создавать дополнительное Activity для ввода наших полей, то можно было бы просто запустить наш Intent.

Плюсы: Простая реализация, достаточно удобно для обратной связи.
Минусы: У пользователя должна быть настроенная программа приёма-передачи почтовых сообщений, без неё обрабатывать данный Intent будет некому.

Часть 2. Mail, анонимус Mail

Данный метод я использовал в своём проекте, обозначим для начала плюсы:

  • Не требует от пользователя настроенного клиента
  • Может быть полностью анонимным
  • Можно передавать все (в пределах разумного, конечно)

Для работы необходимы дополнительные библиотеки javamail-android.
Качаем их, и встраиваем в проект: Контекстное меню проекта > «Build Path» > «Add External Archives. » > «Наши файлы additional, mail, activation»

Для настройки нам также понадобится почтовый ящик зарегистрированный на gmail.com (или любом другом yandex, mail и.т.п.) настройки вы можете посмотреть здесь. В данном случае он будет выступать в виде шлюза через которые будут проходить наши письма.

Начинаем настраивать:
MailSenderClass.java
В данном классе записаны настройки того сервера, через который будет передаваться ваше сообщение. Здесь у нас есть несколько методов:

  • public MailSenderClass(String user, String password) — Конструктор. В качестве аргументов передаются логин и пароль от нашего промежуточного ящика на gmail.com. Здесь же прописываются параметры smtp-подключения к серверу.
  • protected PasswordAuthentication getPasswordAuthentication() — Аутентификация для сервера.
  • public synchronized void sendMail(String subject, String body, String sender, String recipients, String filename) — Основной метод, в который передаются наши данные для отправки.

Рассмотрим код последнего метода чуть ближе:

  1. public synchronized void sendMail( String subject, String body, String sender, String recipients, String filename) throws Exception <
  2. try <
  3. MimeMessage message = new MimeMessage(session);
  4. // Кто
  5. message.setSender( new InternetAddress(sender));
  6. // О чем
  7. message.setSubject(subject);
  8. // Кому
  9. if (recipients.indexOf( ‘,’ ) > 0)
  10. message.setRecipients(Message.RecipientType.TO,
  11. InternetAddress.parse(recipients));
  12. else
  13. message.setRecipient(Message.RecipientType.TO,
  14. new InternetAddress(recipients));
  15. // Хочет сказать
  16. BodyPart messageBodyPart = new MimeBodyPart();
  17. messageBodyPart.setText(body);
  18. _multipart.addBodyPart(messageBodyPart);
  19. // И что показать
  20. if (!filename.equalsIgnoreCase( «» )) <
  21. BodyPart attachBodyPart = new MimeBodyPart();
  22. DataSource source = new FileDataSource(filename);
  23. attachBodyPart.setDataHandler( new DataHandler(source));
  24. attachBodyPart.setFileName(filename);
  25. _multipart.addBodyPart(attachBodyPart);
  26. >
  27. message.setContent(_multipart);
  28. Transport.send(message);
  29. > catch (Exception e) <
  30. Log.e( «sendMail» , «Ошибка отправки функцией sendMail! » );
  31. >
  32. >

* This source code was highlighted with Source Code Highlighter .

Метод также прост. Используя объект класса MimeMessage составляем наше письмо и для отправки передаём методу send, класса Transport.

Читайте также:  Отличие apple carplay от android auto

JSSEProvider.java
Провайдер протокола безопасности для нашей почты. Линк.

VideoSelect.java
Код был взят из ApiDemos, которые поставляются в комплекте с Android SDK, и был чуть подправлен для выполнения с помощью метода startActivityForResult.
После выполнения возвращается строка, содержащая путь к файлу на карте памяти. Код можно будет посмотреть в проекте, он в конце статьи.

ExtendedMail.java
Основной метод отправления сообщения выполняется в функции sitv_sender_mail_async, представляющей класс AsyncTask:

  1. private class sender_mail_async extends AsyncTask String , Boolean><
  2. ProgressDialog WaitingDialog;
  3. @Override
  4. protected void onPreExecute() <
  5. // Выводим пользователю процесс загрузки
  6. WaitingDialog = ProgressDialog.show(ExtendedMail. this , «Отправка данных» , «Отправляем сообщение. » , true );
  7. >
  8. @Override
  9. protected void onPostExecute(Boolean result) <
  10. // Прячем процесс загрузки
  11. WaitingDialog.dismiss();
  12. Toast.makeText(mainContext, «Отправка завершена. » , Toast.LENGTH_LONG).show();
  13. ((Activity)mainContext).finish();
  14. >
  15. @Override
  16. protected Boolean doInBackground(Object. params ) <
  17. try <
  18. // Получаем данные с наших полей
  19. title = ((EditText)findViewById(R.id.screen_sendnews_et_title)).getText().toString();
  20. text = ((EditText)findViewById(R.id.screen_sendnews_et_text)).getText().toString();
  21. from = «from_post_msg@gmail.com» ;
  22. where = «where_post_msg@yandex.ru» ;
  23. // Вызываем конструктор и передаём в него наши логин и пароль от ящика на gmail.com
  24. MailSenderClass sender = new MailSenderClass( «mypostmail@gmail.com» , «password» );
  25. // И вызываем наш метод отправки
  26. sender.sendMail(title, text, from , where , attach);
  27. > catch (Exception e) <
  28. Toast.makeText(mainContext, «Ошибка отправки сообщения!» , Toast.LENGTH_SHORT).show();
  29. >
  30. return false ;
  31. >
  32. >

* This source code was highlighted with Source Code Highlighter .

  1. public void onClick(View v) <
  2. sender_mail_async async_sending = new sender_mail_async();
  3. async_sending.execute();
  4. >

* This source code was highlighted with Source Code Highlighter .

Таким образом создав небольшой класс-поток, можно спокойно слать необходимую информацию от клиента к себе на ящик.

Источник

Отправка электронной почты в Android с использованием JavaMail API без использования встроенного приложения по умолчанию

Я пытаюсь создать приложение для отправки почты в Android.

Если я использую:

Это запустит встроенное приложение для Android; Я пытаюсь отправить письмо по нажатию кнопки напрямую, без использования этого приложения.

Отправка электронной почты в Android с использованием API JavaMail с использованием аутентификации Gmail.

Шаги для создания примера проекта:

MailSenderActivity.java:

GMailSender.java:

JSSEProvider.java:

ДОБАВЬТЕ 3 банки, найденные в следующей ссылке на ваш Android-проект

И не забудьте добавить эту строку в свой манифест:

Просто нажмите ссылку ниже, чтобы изменить доступ к учетной записи для менее безопасных приложений https://www.google.com/settings/security/lesssecureapps

Запустите проект и проверьте почтовую учетную запись получателя на наличие почты. Ура!

PS И не забывайте, что вы не можете выполнять сетевые операции из любой активности в Android. Следовательно, рекомендуется использовать AsyncTask или IntentService избегать сети в исключении основного потока.

Спасибо за вашу ценную информацию. Код работает нормально. Я могу добавить вложение также, добавив следующий код.

Не удалось подключиться к узлу SMTP: smtp.gmail.com, порт: 465

Добавьте эту строку в свой манифест:

Вы можете использовать JavaMail API для обработки ваших почтовых задач. JavaMail API доступен в пакете JavaEE, а его jar доступен для скачивания. К сожалению, его нельзя использовать непосредственно в приложении Android, поскольку он использует компоненты AWT, которые полностью несовместимы в Android.

Вы можете найти порт Android для JavaMail по следующему адресу : http://code.google.com/p/javamail-android/

Добавьте банки в ваше приложение и используйте метод SMTP

Чтобы помочь тем, кто получает исключение Network On Main Thread с целью SDK> 9. Это использует код droopie выше, но будет работать аналогично для любого.

Вы можете использовать AsyncTask, как показано ниже

100% рабочий код с демонстрацией. Вы также можете отправить несколько электронных писем, используя этот ответ.

Скачать проект ЗДЕСЬ

Шаг 1: Загрузите файлы почты, активации, дополнительные файлы jar и добавьте их в папку libs вашего проекта в Android Studio. Я добавил скриншот смотри ниже Ссылка для скачивания

Войдите через gmail ( используя почту ) и включите переключатель LINK.

Большинство людей забывают об этом шаге, надеюсь, вы этого не сделаете.

Читайте также:  Как удалить лишние контакты с андроида

Шаг 2: После завершения этого процесса. Скопируйте и пропустите эти классы в свой проект.

GMail.java

SendMailTask.java

Шаг 3: Теперь вы можете изменить этот класс в соответствии с вашими потребностями, также вы можете отправлять несколько писем, используя этот класс. Я предоставляю XML и Java-файл оба.

activity_mail.xml

SendMailActivity.java

Примечание. Не забудьте добавить интернет- разрешение в свой файл AndroidManifest.xml.

Надеюсь, что это сработает, если нет, просто прокомментируйте ниже.

Использование SMTP — один из способов, а другие уже указали, как это сделать. Просто отметьте, что при этом вы полностью обойдете встроенное почтовое приложение и вам придется предоставить адрес SMTP-сервера, имя пользователя и пароль для этого сервера, либо статически в вашем коде, либо запросить его у пользователя. ,

Другой способ — это простой серверный скрипт, такой как php, который принимает некоторые параметры URL и использует их для отправки почты. Таким образом, вам нужно всего лишь сделать HTTP-запрос с устройства (это легко сделать с помощью встроенных библиотек) и не нужно хранить данные для входа в SMTP на устройстве. Это еще одно косвенное указание по сравнению с прямым использованием SMTP, но поскольку сделать запрос HTTP и отправлять почту из PHP очень просто, это может быть даже проще, чем прямой путь.

Почтовое приложение

Если письмо будет отправлено с учетной записи электронной почты пользователя по умолчанию, которую он уже зарегистрировал на телефоне, вам придется воспользоваться другим подходом. Если у вас есть достаточно времени и опыта, вы можете проверить исходный код приложения электронной почты Android, чтобы увидеть, предлагает ли оно какую-либо точку входа для отправки почты без взаимодействия с пользователем (я не знаю, но, возможно, есть такая).

Возможно, вы даже найдете способ запросить данные учетной записи пользователя (чтобы вы могли использовать их для SMTP), хотя я очень сомневаюсь, что это возможно, потому что это будет представлять огромную угрозу безопасности, а Android построен довольно надежно.

Источник

Android — отправка электронной почты

Электронная почта — это сообщения, распространяемые с помощью электронных средств от одного пользователя системы одному или нескольким получателям через сеть.

Прежде чем приступить к работе с электронной почтой, вы должны знать функциональность электронной почты с намерением. Намерение передает данные из одного компонента в другой компонент в приложении или за его пределами.

Чтобы отправить электронное письмо из вашего приложения, вам не нужно реализовывать почтовый клиент с самого начала, но вы можете использовать существующий, такой как почтовое приложение по умолчанию, предоставляемое из Android, Gmail, Outlook, K-9 Mail и т. Д. Для этого Для этого нам нужно написать Activity, которая запускает почтовый клиент с неявным намерением с правильным действием и данными. В этом примере мы собираемся отправить электронное письмо из нашего приложения с помощью объекта Intent, который запускает существующие почтовые клиенты.

В следующем разделе описываются различные части нашего объекта Intent, необходимые для отправки электронного письма.

Intent Object — Действие для отправки электронной почты

Вы будете использовать действие ACTION_SEND для запуска почтового клиента, установленного на вашем Android-устройстве. Ниже приведен простой синтаксис для создания намерения с действием ACTION_SEND.

Намеренный объект — данные / тип для отправки электронной почты

Чтобы отправить электронное письмо, вам нужно указать mailto: в качестве URI, используя метод setData (), а тип данных будет text / plain, используя метод setType () следующим образом:

Intent Object — Дополнительно для отправки электронной почты

Android имеет встроенную поддержку для добавления полей TO, SUBJECT, CC, TEXT и т. Д., Которые можно прикрепить к цели перед отправкой намерения целевому почтовому клиенту. Вы можете использовать следующие дополнительные поля в вашей электронной почте —

Читайте также:  Настройки push уведомления android

Строка [], содержащая адреса электронной почты, которые должны быть слепо скопированы.

Строка [], содержащая адреса электронной почты, которые должны быть скопированы.

Строка [], содержащая адреса электронной почты, которые должны быть доставлены.

Константа String, связанная с Intent, используемая с ACTION_SEND для предоставления альтернативы EXTRA_TEXT в виде текста в формате HTML.

Постоянная строка, содержащая желаемую строку темы сообщения.

Константа CharSequence, связанная с Intent, используемая с ACTION_SEND для предоставления литеральных данных для отправки.

Заголовок диалога CharSequence для предоставления пользователю при использовании с ACTION_CHOOSER.

Строка [], содержащая адреса электронной почты, которые должны быть слепо скопированы.

Строка [], содержащая адреса электронной почты, которые должны быть скопированы.

Строка [], содержащая адреса электронной почты, которые должны быть доставлены.

Константа String, связанная с Intent, используемая с ACTION_SEND для предоставления альтернативы EXTRA_TEXT в виде текста в формате HTML.

Постоянная строка, содержащая желаемую строку темы сообщения.

Константа CharSequence, связанная с Intent, используемая с ACTION_SEND для предоставления литеральных данных для отправки.

Заголовок диалога CharSequence для предоставления пользователю при использовании с ACTION_CHOOSER.

Вот пример, показывающий, как назначить дополнительные данные для вашего намерения —

Результат вышеприведенного кода такой, как показано ниже

Пример электронной почты

пример

В следующем примере показано, как на практике использовать объект Intent для запуска почтового клиента для отправки электронного письма указанным получателям.

Чтобы по электронной почте поэкспериментировать с этим примером, вам понадобится мобильное устройство с новейшей ОС Android, в противном случае вы можете столкнуться с проблемой эмулятора, который может работать некорректно. Во-вторых, вам понадобится почтовый клиент, такой как GMail (по умолчанию каждая версия Android с клиентским приложением Gmail) или K9mail, установленный на вашем устройстве.

Sr.No. Дополнительные данные и описание
1
шаг Описание
1 Вы будете использовать Android studio для создания приложения Android и назовите его как Tutorialspoint в пакете com.example.tutorialspoint .
2 Измените файл src / MainActivity.java и добавьте необходимый код для отправки электронной почты.
3 Измените XML-файл макета. Res / layout / activity_main.xml добавьте любой компонент GUI, если это необходимо. Я добавляю простую кнопку для запуска почтового клиента.
4 Измените файл res / values ​​/ strings.xml, чтобы определить необходимые постоянные значения
5 Измените AndroidManifest.xml, как показано ниже
6 Запустите приложение, чтобы запустить эмулятор Android, и проверьте результат изменений, внесенных в приложение.

Ниже приводится содержимое измененного основного файла активности src / com.example.Tutorialspoint / MainActivity.java .

Ниже будет содержание файла res / layout / activity_main.xml

Здесь abc указывает на логотип tutorialspoint

Ниже будет содержимое файла res / values ​​/ strings.xml для определения двух новых констант:

Ниже приводится содержимое по умолчанию для AndroidManifest.xml

Давайте попробуем запустить ваше приложение tutorialspoint . Я предполагаю, что вы подключили свое фактическое мобильное устройство Android к компьютеру. Чтобы запустить приложение из Android Studio, откройте один из файлов деятельности вашего проекта и нажмите «Выполнить». значок с панели инструментов. Перед запуском приложения программа установки Android Studio отобразит следующее окно, чтобы выбрать вариант, в котором вы хотите запустить приложение Android. Выберите мобильное устройство в качестве параметра, а затем проверьте свое мобильное устройство, которое отобразит следующий экран —

Теперь используйте кнопку « Написать письмо», чтобы вывести список всех установленных почтовых клиентов. Из списка вы можете выбрать один из почтовых клиентов для отправки вашей электронной почты. Я собираюсь использовать клиент Gmail для отправки своего электронного письма, в котором будут доступны все поля по умолчанию, как показано ниже. Здесь From: будет идентификатором электронной почты по умолчанию, который вы зарегистрировали для своего устройства Android.

Вы можете изменить любое из указанных полей по умолчанию и, наконец, использовать кнопку отправки электронной почты, чтобы отправить свою электронную почту указанным получателям.

Источник

Оцените статью