Я пытаюсь создать приложение для отправки почты в Android.
Если я использую:
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
Это запустит встроенное приложение для Android; Я пытаюсь отправить письмо по нажатию кнопки напрямую, без использования этого приложения.
Ответы:
Отправка электронной почты в Android с использованием API JavaMail с использованием аутентификации Gmail.
Шаги для создания примера проекта:
MailSenderActivity.java:
GMailSender.java:
JSSEProvider.java:
ДОБАВЬТЕ 3 банки, найденные в следующей ссылке на ваш Android-проект
Нажмите здесь - Как добавить внешние банки
И не забудьте добавить эту строку в свой манифест:
Просто нажмите ссылку ниже, чтобы изменить доступ к учетной записи для менее безопасных приложений https://www.google.com/settings/security/lesssecureapps
Запустите проект и проверьте почтовую учетную запись получателя на наличие почты. Ура!
PS И не забывайте, что вы не можете выполнять сетевые операции из любой активности в Android. Следовательно, рекомендуется использовать
AsyncTask
илиIntentService
избегать сети в исключении основного потока.Файлы Jar: https://code.google.com/archive/p/javamail-android/
источник
Спасибо за вашу ценную информацию. Код работает нормально. Я могу добавить вложение также, добавив следующий код.
источник
filename
переменной здесь вы должны указать путь к файлу. Например:String path = Environment.getExternalStorageDirectory().getPath() + "/temp_share.jpg";
Добавьте эту строку в свой манифест:
источник
Вы можете использовать JavaMail API для обработки ваших почтовых задач. JavaMail API доступен в пакете JavaEE, а его jar доступен для скачивания. К сожалению, его нельзя использовать непосредственно в приложении Android, поскольку он использует компоненты AWT, которые полностью несовместимы в Android.
Вы можете найти порт Android для JavaMail по следующему адресу : http://code.google.com/p/javamail-android/
Добавьте банки в ваше приложение и используйте метод SMTP
источник
eu.ocathain.com.sun.mail:javax.mail:1.5.2
Чтобы помочь тем, кто получает исключение 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.
<uses-permission android:name="android.permission.INTERNET"/>
Надеюсь, что это сработает, если нет, просто прокомментируйте ниже.
источник
SMTP
Использование SMTP - один из способов, а другие уже указали, как это сделать. Просто отметьте, что при этом вы полностью обойдете встроенное почтовое приложение и вам придется предоставить адрес SMTP-сервера, имя пользователя и пароль для этого сервера, либо статически в вашем коде, либо запросить его у пользователя. ,
HTTP
Другой способ - это простой серверный скрипт, такой как php, который принимает некоторые параметры URL и использует их для отправки почты. Таким образом, вам нужно всего лишь сделать HTTP-запрос с устройства (это легко сделать с помощью встроенных библиотек) и не нужно хранить данные для входа в SMTP на устройстве. Это еще одно косвенное указание по сравнению с прямым использованием SMTP, но поскольку сделать запрос HTTP и отправлять почту из PHP очень просто, это может быть даже проще, чем прямой путь.
Почтовое приложение
Если письмо будет отправлено с учетной записи электронной почты пользователя по умолчанию, которую он уже зарегистрировал на телефоне, вам придется воспользоваться другим подходом. Если у вас есть достаточно времени и опыта, вы можете проверить исходный код приложения электронной почты Android, чтобы увидеть, предлагает ли оно какую-либо точку входа для отправки почты без взаимодействия с пользователем (я не знаю, но, возможно, есть такая).
Возможно, вы даже найдете способ запросить данные учетной записи пользователя (чтобы вы могли использовать их для SMTP), хотя я очень сомневаюсь, что это возможно, потому что это будет представлять огромную угрозу безопасности, а Android построен довольно надежно.
источник
Вот альтернативная версия, которая также работает для меня и имеет вложения (опубликованная уже выше, но полная версия, в отличие от исходной ссылки, которую люди опубликовали, они не могут заставить ее работать, так как отсутствуют данные)
и назвать это в деятельности ...
источник
Could not send email android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork
необходимо увидеть это решение stackoverflow.com/questions/25093546/…Применение:
Конфигурация:
Разрешения:
Также для вложений необходимо установить разрешение READ_EXTERNAL_STORAGE:
Источник
(Я сам проверил)
источник
Слово с предупреждением, если в качестве сервера SMTP по умолчанию используется smtp.gmail.com.
Google заставит вас часто менять пароль связанной учетной записи электронной почты из-за их чрезмерной политики «подозрительной активности». По сути, он рассматривает повторные запросы SMTP из разных стран в течение короткого периода времени как «подозрительная деятельность». Поскольку они предполагают, что вы (владелец учетной записи электронной почты) можете находиться одновременно только в одной стране.
Когда системы Google обнаружат «подозрительную активность», это предотвратит дальнейшие электронные письма, пока вы не измените пароль. Поскольку вы жестко закодировали пароль в приложении, вам придется перезапускать приложение каждый раз, когда это происходит, не идеально. Это происходило со мной 3 раза в неделю, я даже сохранял пароль на другом сервере и динамически извлекал пароль каждый раз, когда Google заставлял меня его менять.
Поэтому я рекомендую использовать один из многих бесплатных провайдеров smtp вместо smtp.gmail.com, чтобы избежать этой проблемы безопасности. Используйте тот же код, но измените «smtp.gmail.com» на ваш новый узел пересылки smtp.
источник
suspicioud activity
проблему?Редактировать: JavaMail 1.5.5 утверждает, что поддерживает Android , поэтому вам больше ничего не нужно.
Я перенес последнюю версию JavaMail (1.5.4) на Android. Он доступен в Maven Central, просто добавьте следующее вbuild.gradle
~~Вы можете следовать официальному руководству .
Исходный код доступен здесь: https://bitbucket.org/artbristol/javamail-forked-android
источник
Я нашел более короткую альтернативу для тех, кто нуждается в помощи. Код является:
Источник: отправка электронной почты через JavaMail API
Надеюсь это поможет! Удачи!
источник
Те, кто
ClassDefNotFoundError
пытаются переместить эти три jar-файла в папку lib вашего проекта, это работает для меня !!источник
Для отправки письма с вложением.
источник
Я не могу запустить код Vinayak B. Наконец я решил эту проблему следующим образом:
1. Используя это
2. Применение AsyncTask.
3.Изменяется проблема безопасности учетной записи отправителя Gmail. (Измените на «ВКЛЮЧЕНО») в этом
источник
Вы рассматривали возможность использования Apache Commons Net? Начиная с версии 3.3, только одна банка (и вы можете зависеть от нее, используя gradle или maven), и все готово: http://blog.dahanne.net/2013/06/17/sending-a-mail-in-java- и-андроид-с-апача-достоянию-нетто /
источник
Без вмешательства пользователя вы можете отправить следующее:
Отправить письмо от клиента apk. Здесь mail.jar, Activation.jar требуется для отправки электронной почты Java. Если эти банки добавить, это может увеличить размер APK.
В качестве альтернативы, вы можете использовать веб-сервис на стороне сервера, который будет использовать те же mail.jar и activ.jar для отправки электронной почты. Вы можете позвонить в веб-сервис через asynctask и отправить электронное письмо. Обратитесь по той же ссылке.
(Но вам нужно будет знать учетные данные почтовой учетной записи)
источник
В случае, если от вас требуется, чтобы библиотека jar была как можно меньше, можно отдельно включить функцию SMTP / POP3 / IMAP, чтобы избежать проблемы «слишком много методов в dex».
Вы можете выбрать нужные библиотеки jar на веб-странице javanet , например, mailapi.jar + imap.jar может позволить вам получить доступ к icloud, почтовому серверу hotmail по протоколу IMAP. (с помощью Additional.jar и Activation.jar)
источник
Я попытался использовать код, представленный @Vinayak B. Однако я получаю сообщение об ошибке: нет поставщика SMTP
Я создал новый вопрос для этого с дополнительной информацией ЗДЕСЬ
Я смог все исправить сам. Мне пришлось использовать другой mail.jar, и я должен был убедиться, что мой « доступ к менее защищенным приложениям » включен.
Надеюсь, это поможет любому, у кого такая же проблема. После этого этот фрагмент кода работает и на стекле Google.
источник
Весь код, приведенный в других ответах, является правильным и работает нормально, но немного грязно, поэтому я решил опубликовать библиотеку (все еще в разработке), чтобы использовать ее более простым способом: AndroidMail .
Вам просто нужно создать MailSender, создать почту и отправить ее (уже обрабатывается в фоновом режиме с помощью AsyncTask).
Вы можете получить уведомление об отправленном электронном письме, а также поддержку различных типов получателей (TO, CC и BCC), вложений и HTML:
Вы можете получить его через Gradle или Maven:
Пожалуйста, дайте мне знать, если у вас есть какие-либо проблемы с этим! :)
источник
Здесь много решений. Однако я думаю, что мы должны изменить конфигурацию GMail, чтобы разрешить доступ с менее защищенных устройств. Перейдите по ссылке ниже и включите ее. Меня устраивает
https://myaccount.google.com/lesssecureapps?pli=1
источник
источник
Отправка электронной почты программно с Kotlin.
Я также нашел этот список почтовых сервисов POP действительно полезным:
https://support.office.com/en-gb/article/pop-and-imap-email-settings-for-outlook-8361e398-8af4-4e97-b147-6c6c4ac95353
Как пользоваться:
Код:
Gradle:
AndroidManifest:
источник
Чтобы добавить вложение, не забудьте добавить.
источник