Отправка электронной почты из React Native с использованием протокола SMTP

#react-native #email #smtp #expo

#react-native #Адрес электронной почты #smtp #выставка

Вопрос:

Я хочу нажать кнопку и отправить себе электронное письмо с учетной записью Gmail, используя протокол SMTP в приложении Expo в React Native. Я не хочу использовать Linking , потому что он открывает экран Gmail, и я хочу отправить электронное письмо с кодом, а не заставить пользователя отправить его.

Я нашел вызываемый модуль react-native-smtp-mailer , но он выдает ошибку, которую я не смог решить.

Это функция, которую я создал:

 import RNSmtpMailer from "react-native-smtp-mailer";

export async function sendEmail() {
  const res = await RNSmtpMailer.sendMail({
    mailhost: "smtp.gmail.com",
    port: "465",
    ssl: true,
    username: "get.food.cordoba@gmail.com",
    password: "password123",
    from: "get.food.cordoba@gmail.com",
    recipients: "octaviopercivaldi2@gmail.com",
    subject: "subject 123",
    htmlBody: "<p>body 123</p>",
    attachmentPaths: [],
    attachmentNames: [],
    attachmentTypes: [],
  })
  console.log(res)
}
  

Это то, что я получил от запуска sendEmail функции:

 [Unhandled promise rejection: TypeError: null is not an object (evaluating '_reactNativeSmtpMailer.default.sendMail')]
  

Если вы знаете какое-либо другое решение или знаете, как заставить этот модуль работать, дайте мне знать, пожалуйста.
Спасибо за ответы.

Комментарии:

1. Отказ от ответственности: не решение вышеуказанной проблемы. У меня было аналогичное требование 2 месяца назад, и я попробовал то же самое, но не смог добиться какого-либо решения и окончательно оставил подход, основанный на электронной почте на основе API. И это также более предпочтительно, потому что для подключения SMTP вам нужно либо поделиться паролем через API, либо жестко закодировать его в мобильном приложении, в любом случае, это небезопасно, чем вызов API. еще одним решением является использование стороннего решения AWS SNS или SendGrid или Sentry.

Ответ №1:

Библиотека, которую вы пытаетесь использовать https://github.com/angelos3lex/react-native-smtp-mailer , требует простого проекта react native, для использования этой библиотеки вам необходимо выполнить извлечение из проекта expo для этого выполните эту команду в корневом каталоге проекта:

 expo-cli eject
  

Затем установка react-native-smtp-mailer с использованием npm или yarn

Затем выполняется react-native link react-native-smtp-mailer

Затем выполните следующие дополнительные шаги: https://github.com/angelos3lex/react-native-smtp-mailer#extra-steps

Запустите yarn ios или yarn android для запуска сервера JavaScript bundler и создайте двоичный файл проекта. Для этого требуется Xcode или Android Studio, в зависимости от платформы.

Однако это не лучший способ отправки электронной почты, в конечном итоге вам потребуется реализовать серверный API, через который вы отправляете свое сообщение, что более безопасно, или использовать веб-сервис, такой как служба электронной почты AWS.

Комментарии:

1. Если кто-нибудь сможет заставить эту библиотеку работать с последними версиями React Native (я на 0.64.2), дайте мне знать. Я не могу создать свое приложение после связывания этой библиотеки (тестирование с iOS).

Ответ №2:

Если вы из будущего и у вас та же проблема, что и у меня, вы можете попробовать:

  1. Решение, данное Каримом Аделем
  2. Это решение, которое я нашел:

Я не хотел извлекать, поэтому я искал другие альтернативы. И я нашел облачные функции Firebase, они похожи на серверную часть, которая работает 24/7, бесплатно, с проектом Google Firebase. Хорошая вещь в этом заключается в том, что вы можете использовать NodeJS и nodemailer библиотеку для отправки электронных писем (и делать все, что вы можете придумать).

Вот это руководство, которое я нашел очень полезным в Medium.

Комментарии:

1. предупреждение: стоит денег … Error: Your project MyProject must be on the Blaze (pay-as-you-go) plan to complete this command. (после запуска firebase deploy )