Содержание

Назначение и основные функции — Электронная почта.

      К основным функциям вашей электронной почты относится отправка:

  • текстовых сообщений;
  • фотографий, видеозаписей, текстовых документов и других файлов

      Но это ещё не всё! Вы знаете, для чего еще она предназначена? Она служит:

  • Для регистрации на других проектах;
  • Для идентификации отправителя
  • Оповещение о прибытии почты
  • Наличие встроенного текстового редактора
  • Наличие нескольких вариантов адресации сообщений
  • Чтение почты
  • Обработка сообщений
  • Хранение сообщений. Многие системы позволяют распределить сообщения по папкам в соответствии с их тематикой. Системы электронной почты с расширенными возможностями позволяют хранить связанные сообщения — последовательность сообщений запоминается в формате, имитирующем диалог
  • Наличие списков рассылки — хранение наборов имен, объединенных под одним заголовком и рассматриваемых как один адрес электронной почты
  • Наличие форм — средств отображения структурированной информации
  • Распределение полномочий — разрешение или запрещение доступа к личному почтовому ящику
  • Обеспечение безопасности — введение пароля, шифрование информации
      Зачем еще нужна своя электронная почта? Как понимаете, каждый адрес почты открывается на конкретного человека. Собственно поэтому во время регистрации необходимо ввести фамилию, имя, дату рождения и некоторые другие сведения. В последующем почтовый ящик может пригодиться для следующих целей:
  1.  регистрации на отдельных проектах;
  2.  восстановления логинов и паролей на других сайтах.
  • для привязки электронных кошельков;
      При пользовании электронными кошельками  на адрес электронной почты владельца при желании могут приходить информационные письма. Они могут содержать сведения о приходных, расходных операциях, учетных данных и другую полезную информацию.
  • для работы с хранилищами информации
      В наше время любой начинающий пользователь может завести свой бесплатный электронный почтовый ящик, достаточно зарегистрироваться на одном из интернет-порталов и все возможности электронной почты станут доступны. Но как же создать аккаунт в электронной почте(например в Gmail)? Об этом можно узнать из видеоролика!
Видео YouTube

Функции электронной почты — Электронная почта — GCSE ICT Revision

Использование электронной почты

Для отправки и получения электронной почты вы должны быть подключены к Интернету.

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

Пользователи широкополосного доступа платят ежемесячную подписку по фиксированной ставке, цена, которую они платят, не зависит от того, как долго они находятся в сети.

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

  1. Откройте почтовый клиент, например Microsoft Outlook, или, если вы используете веб-почту, откройте браузер и введите адрес веб-почты, например http: // www.gmail.com и войдите в систему.
  2. Нажмите «Создать» или «Написать».
  3. Введите адрес (а) электронной почты получателя (ей) в поле «Кому».
  4. Напишите подходящую тему в поле «Тема».
  5. Напишите сообщение в свободном месте под полем «Тема».
  6. Нажмите «Отправить», чтобы отправить электронное письмо.

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

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

Почтовые клиенты и веб-почта периодически проверяют наличие новых писем. Ручную проверку можно выполнить, щелкнув «Отправить и получить» в почтовом клиенте или обновив страницу при использовании веб-почты.

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

Основы электронной почты: общие функции электронной почты

Урок 2: Общие функции электронной почты

/ ru / email101 / Introduction-to-email / content /

Введение

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

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

Общие сведения об интерфейсе электронной почты

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

Имейте в виду, что эти примеры предоставляют только общий обзор. Вы можете посетить наше руководство по Gmail, чтобы подробно узнать, как использовать почтовое приложение.

Входящие

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

Панель сообщений

Когда вы выбираете электронное письмо в почтовом ящике, оно откроется в Сообщение панели . Отсюда вы можете прочитать сообщение и выбрать , как ответить различными командами.

Панель компоновки

Вы можете нажать кнопку Написать или Создать кнопку в папке «Входящие», чтобы открыть панель создания для создания собственного сообщения электронной почты. Отсюда вам нужно будет ввести адрес электронной почты получателя и тему .У вас также будет возможность загружать файлы (фотографии, документы и т. Д.) В виде вложений , и добавляют к сообщению форматирование .

Панель создания также появится при выборе Ответить или Переслать . Текст из исходного сообщения будет скопирован в панель создания.

Общие условия электронной почты и действия

Все почтовые приложения используют определенные термины и команды, которые вам необходимо понять перед использованием электронной почты.В приведенных ниже примерах используется Gmail Панель составления и Панель сообщений для ознакомления с основными терминами электронной почты, но они все равно будут применимы для Yahoo! и Outlook.

Нажмите кнопки в интерактивном меню ниже, чтобы узнать больше о панели «Составить». .

Нажмите кнопки в интерактивном меню ниже, чтобы узнать больше о панели сообщений .

/ ru / email101 / contacts-and-calendars / content /

Что такое электронная почта? — Определение, функции, типы и многое другое

Определение Электронная почта

Электронная почта (электронная почта) — это способ обмена сообщениями между людьми с помощью электронных устройств. Изобретенный Рэем Томлинсоном в 1960 году, он стал модным к середине 1970 года.

Вы можете отправлять и получать сообщения нескольким получателям или получателям, находящимся в любой точке мира. В дополнение к письменному тексту вы можете включать такие файлы, как документы, изображения, музыку, видеофайлы и т. Д. Простота использования, скорость и низкая стоимость передачи информации означают, что у большинства организаций и частных лиц есть [электронная почта] как основное средство общения. Таким образом, можно было перенести традиционную корреспонденцию, телефон и факс из средств коммуникации в первую очередь.

Источник сообщения электронной почты

В электронном письме достаточно старые данные. Несмотря на то, что все обрабатывалось ручной почтой, с использованием технологий возникла потребность общаться быстрее, не создавая слишком больших затрат. В 1965 году на том же компьютере был создан рисунок Почты. Первое сообщение, отправленное по электронной почте (с одного компьютера на другой), было в 1971 году благодаря сети ARPANET. Позже Рэй Томлинсон изменил видение почты.

Рэй был программистом, которому удалось не только отправить первое письмо в мире, но и использовать символ @ как метод разделения компьютеров пользователя в дополнение к идентификации почтовой компании, в которой он был зарегистрирован.Затем, в 1977 году, электронная почта стала стандартизированной. Итак, в 1962 году Массачусетский технологический институт начал отправлять сообщения через компьютер, имея возможность сохранять каждый файл на своем жестком диске.

Функции электронной почты

Необходимо указать протоколы их использования, например, есть протокол SMTP, его аббревиатура на английском языке означает Simple Mail Transfer Protocol, который позволяет передавать сообщение с исходящего сервера на получатель. Протокол POP, аббревиатура которого на английском языке означает протокол почтового отделения.

Также прочтите: Что такое электронная коммерция? — Определение, функции, преимущества и многое другое

Как создать учетную запись электронной почты

Создание электронной почты не сложно, но вы должны четко понимать, что существуют разные почтовые платформы. Всегда хорошо иметь учетную запись на каждой из них, потому что люди могут различаться на разных платформах; все зависит от его работы, маневренности, преимуществ и качества. Чтобы создать электронное письмо, вы должны перейти на самую желаемую страницу электронной почты; это может быть электронная почта Gmail или Outlook.В правом верхнем углу страницы появятся две опции «Войти» и «Зарегистрироваться». Необходимо выбрать второй вариант.

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

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

Самые популярные электронные письма

Несмотря на то, что существуют разные почтовые платформы, пользователи всегда предпочтут одну перед другой; это связано с качеством, которое они предлагают, простотой использования и опытом, которым они обладают.

Gmail

Gmail является одним из самых известных электронных писем во всем мире на протяжении многих лет. Это превосходный почтовый провайдер, у которого в сети не менее одного миллиарда пользователей.

Outlook

Outlook, ранее известный как Hotmail Email, является одним из инструментов Microsoft. Он имеет расширенные возможности хранения, и возможность восстановления этих писем удаляется по ошибке.

Yahoo

Yahoo — еще одна важная платформа электронной почты, хотя это также инструмент веб-поиска. На этой платформе вы можете удалять неиспользуемые сообщения через 90 дней, у нее 350 миллионов пользователей.

AOI

AOI также является одной из самых популярных платформ электронной почты в сети; он имеет неограниченную емкость хранения и известен с 1980 года под названием América Online.Verizon купила его в 2015 году (кстати, вместе с Yahoo), чтобы оптимизировать свои операции и превратить их в две привлекательные почтовые платформы.

iCloud

iCloud — уникальная платформа для устройств Apple. У этой компании есть ряд довольно строгих политик безопасности, и никто не может получить доступ к этой платформе, так как очень важно иметь машину от этой компании.

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

Также читайте: Что такое ноутбук? — Определение, особенности, плюсы и минусы и многое другое

Подписка на обновления Отказ от подписки на обновления

6.Настройка функциональности электронной почты

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

Функциональность электронной почты включает:

Учетная запись почты — определяет метод, используемый для отправки электронных писем. Вы можете выбрать функцию mail () по умолчанию или определить свой собственный SMTP-сервер.Здесь вы можете найти полное руководство.
Убедитесь, что учетная запись электронной почты настроена правильно — попробуйте проверить отправку электронных писем.
Без рабочих писем ни партнеры, ни вы не получите подтверждения о регистрации партнеров, новых продажах / потенциальных клиентах и ​​т. Д.

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

Если вы хотите использовать локализованные тексты, то все, что находится между ## ##, будет локализовано, если оно будет добавлено в качестве источника перевода на ваши импортированные языки. Поэтому, если вы хотите использовать локализованный текст в своих шаблонах электронной почты, вам необходимо вставить конкретный текст между ## ## — на английском языке (без специальных символов) и создать источник и перевод в языковом файле (щелкните здесь, чтобы просмотреть пример локализация).

Здесь вы можете посмотреть видео:

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

Переходите к следующему шагу настройки — 7. Настройте форму регистрации партнера

Многочисленные варианты использования электронной почты

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

Электронная почта во многом облегчила мне жизнь. Это позволяет мне:

  • Свяжитесь с людьми по всему миру бесплатно (или недорого)
  • Общайтесь более чем с одним человеком одновременно
  • Взаимодействие с документами (например, высоко ценимый документальный след CYA)
  • Оставляйте сообщения в любое время суток, не беспокоя людей

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

  • Совместная работа
  • Отправка вложений
  • Совместное общение нескольких человек (например,грамм. резьба)
  • Возможности поиска
  • Автоматизация действий с правилами
  • Интеграция календарей, встреч и т. Д.

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

Сложный «проблемный ребенок»

Электронная почта стала «проблемным ребенком» для профессионалов в области управления информацией. Но во многих отношениях электронная почта получает плохую репутацию. Электронная почта не обязательно является проблемой. Реальная проблема заключается в том, как мы это используем и думаем. Поскольку электронная почта — это способ заменить вербальное общение, в некотором смысле мы хотим, чтобы она имитировала качества, связанные с ведением разговора, такие как способность плавно переключаться между темами, смешивать личные и профессиональные, а также отвечать в данный момент.Хотя электронная почта способна делать те же самые вещи, она этого не делает, и конечным результатом является большой объем плохо созданных электронных писем, что затрудняет управление информацией.

Я посетил ряд семинаров и презентаций о том, как более эффективно управлять электронной почтой. Он почти доходит до того, что к нему относятся как к отдельному объекту управления записями. Меня всегда учили, что переписка не является отдельной серией записей, потому что она всегда о чем-то или является частью процесса, связанного с созданием записей. Однако, когда дело доходит до управления электронной почтой, все это, похоже, разваливается.

Так что же такого особенного в электронной почте? Почему нам так сложно управлять?

  1. Электронная почта используется не только для переписки.
  2. Люди привыкли полагаться на электронную почту в самых разных целях.

Благодаря своему многолетнему опыту работы в качестве специалиста по RIM я заметил, что люди используют электронную почту для самых разных целей, помимо ее основного использования для переписки. Хотя эти альтернативные способы использования настолько распространены, что они определяют новую норму использования электронной почты.Люди привыкли полагаться на электронную почту для любого количества функций, помимо общения, включая, помимо прочего, справочную информацию, совместную работу, хранение, управление задачами, мобильный доступ, календари и планирование, и , прикрывающие ваш звуковой сигнал.

Я даже видел множество почтовых ящиков и разговаривал со многими людьми, которые, кажется, считают нормальным либо никогда не очищать корзину электронной почты («на всякий случай»), либо используют корзину в качестве хранилища справочных материалов. Gmail даже предлагает возможность хранить каждое электронное письмо в папке «Вся почта», которая, согласно Google, «является вашим архивом, местом хранения всей почты, которую вы когда-либо отправляли или получали, но не удалили.«Я лично никогда не использовал и не создавал папку .pst, но эта папка« Вся почта »звучит очень похоже.

Следите за обновлениями, чтобы увидеть следующий выпуск, посвященный «Почему электронная почта по-прежнему популярна» и «Внесение фундаментальных изменений».

Подробнее читайте в бесплатной книге AIIM, «Каковы способы использования электронной почты: решение проблем управления электронной почтой».

# emailmanagement #EnterpriseContentManagement

Примеры — документация Python 3.9.7

Вот несколько примеров использования пакета email для чтения, записи, и отправлять простые сообщения электронной почты, а также более сложные сообщения MIME.

Во-первых, давайте посмотрим, как создать и отправить простое текстовое сообщение (как текстовое содержимое и адреса могут содержать символы Unicode):

 # Импортировать smtplib для фактической функции отправки
импортировать smtplib

# Импортируйте модули электронной почты, которые нам понадобятся
из email. message импорт EmailMessage

# Откройте простой текстовый файл, имя которого находится в текстовом файле для чтения.
с открытым (текстовым файлом) как fp:
    # Создать текстовое / обычное сообщение
    msg = EmailMessage ()
    msg.set_content (fp.read ())

# me == адрес электронной почты отправителя
# you == адрес электронной почты получателя
msg ['Subject'] = f'Содержимое {текстового файла} '
msg ['From'] = я
msg ['Кому'] = вам

# Отправить сообщение через наш собственный SMTP-сервер.s = smtplib.SMTP ('локальный')
s.send_message (сообщение)
s.quit ()
 

Разбор RFC 822 заголовков можно легко выполнить с помощью классов из модуля парсера :

 # Импортируем модули электронной почты, которые нам понадобятся
из email.parser импортировать BytesParser, Parser
из email.policy import default

# Если заголовки электронного письма находятся в файле, раскомментируйте эти две строки:
# с open (messagefile, 'rb') как fp:
# заголовки = BytesParser (policy = default) .parse (fp)

# Или для разбора заголовков в строке (это необычная операция) используйте:
заголовки = Парсер (политика = по умолчанию).parsestr (
        'От: Foo Bar  \ n'
        'Кому:  \ n'
        'Тема: Тестовое сообщение \ n'
        '\ n'
        'Тело пойдет сюда \ n')

# Теперь к элементам заголовка можно обращаться как к словарю:
print ('Кому: {}'. формат (заголовки ['до']))
print ('От: {}'. формат (заголовки ['от']))
print ('Тема: {}'. формат (заголовки ['тема']))

# Вы также можете получить доступ к частям адресов:
print ('Имя пользователя получателя: {}'. формат (заголовки ['в']. адреса [0]. имя пользователя))
print ('Имя отправителя: {}'.формат (заголовки ['от']. адреса [0] .display_name))
 

Вот пример того, как отправить сообщение MIME, содержащее группу семейных изображений, которые могут находиться в каталоге:

 # Импортировать smtplib для фактической функции отправки
импортировать smtplib

# И imghdr, чтобы найти типы наших изображений
импорт imghdr

# Вот модули пакета электронной почты, которые нам понадобятся
из email.message импорт EmailMessage

# Создать контейнерное сообщение электронной почты.
msg = EmailMessage ()
msg ['Subject'] = 'Воссоединение нашей семьи'
# me == адрес электронной почты отправителя
# family = список адресов электронной почты всех получателей
msg ['From'] = я
msg ['Кому'] = ','.присоединиться (семья)
msg.preamble = 'Вы не увидите этого в программе чтения почты с поддержкой MIME. \ n'

# Открыть файлы в двоичном режиме. Используйте imghdr, чтобы выяснить
# Подтип MIME для каждого конкретного изображения.
для файла в png-файлах:
    с open (file, 'rb') как fp:
        img_data = fp.read ()
    msg.add_attachment (img_data, maintype = 'изображение',
                                 подтип = imghdr.what (Нет, img_data))

# Отправьте электронное письмо через наш собственный SMTP-сервер.
с smtplib.SMTP ('localhost') как s:
    s.send_message (сообщение)
 

Вот пример того, как отправить все содержимое каталога по электронной почте. сообщение:

 #! / Usr / bin / env python3

"" "Отправить содержимое каталога в виде сообщения MIME."" "

импорт ОС
импортировать smtplib
# Для угадывания типа MIME по расширению имени файла
импортировать миметипы

из argparse import ArgumentParser

из email.message импорт EmailMessage
из email.policy import SMTP


def main ():
    parser = ArgumentParser (description = "" "\
Отправить содержимое каталога в виде сообщения MIME.
Если не указан параметр -o, электронное письмо отправляется путем пересылки на ваш местный адрес.
SMTP-сервер, который затем выполняет нормальный процесс доставки. Ваш локальный компьютер
должен быть запущен SMTP-сервер."" ")
    parser.add_argument ('- d', '--directory',
                        help = "" "Отправить содержимое указанного каталога по почте,
                        в противном случае используйте текущий каталог. Только обычный
                        файлы в каталоге отправляются, и мы не переходим к
                        подкаталоги. "" ")
    parser.add_argument ('- o', '--output',
                        metavar = 'ФАЙЛ',
                        help = "" "Печатать составленное сообщение в ФАЙЛ вместо
                        отправка сообщения на SMTP-сервер."" ")
    parser.add_argument ('- s', '--sender', required = True,
                        help = 'Значение заголовка From: (обязательно)')
    parser.add_argument ('- r', '--recipient', required = True,
                        действие = 'добавить', metavar = 'ПОЛУЧАТЕЛЬ',
                        по умолчанию = [], dest = 'получатели',
                        help = 'A To: значение заголовка (хотя бы одно обязательное)')
    args = parser.parse_args ()
    каталог = args.directory
    если не каталог:
        каталог = '.'
    # Создать сообщение
    msg = EmailMessage ()
    msg ['Subject'] = f'Содержимое каталога {os.path.abspath (каталог)} '
    msg ['Кому'] = ',' .join (args.recipients)
    msg ['From'] = args.sender
    msg.preamble = 'Вы не увидите этого в программе чтения почты с поддержкой MIME. \ n'

    для имени файла в os.listdir (каталог):
        путь = os.path.join (каталог, имя файла)
        если не os.path.isfile (путь):
            Продолжить
        # Угадайте тип содержимого на основе расширения файла. Кодирование
        # будет проигнорирован, хотя мы должны проверить такие простые вещи, как
        # gzip-файлы или сжатые файлы.ctype, encoding = mimetypes.guess_type (путь)
        если ctype равен None или кодировка не None:
            # Никакого предположения сделать невозможно, или файл закодирован (сжат), поэтому
            # использовать общий тип "мешок с битами".
            ctype = 'приложение / октет-поток'
        основной тип, подтип = ctype.split ('/', 1)
        с open (path, 'rb') как fp:
            msg.add_attachment (fp.read (),
                               maintype = maintype,
                               подтип = подтип,
                               имя_файла = имя_файла)
    # Теперь отправьте или сохраните сообщение
    если аргументы.выход:
        с open (args.output, 'wb') как fp:
            fp.write (msg.as_bytes (политика = SMTP))
    еще:
        с smtplib.SMTP ('localhost') как s:
            s.send_message (сообщение)


если __name__ == '__main__':
    главный()
 

Вот пример того, как распаковать сообщение MIME, подобное тому, выше, в каталог файлов:

 #! / Usr / bin / env python3

"" "Распаковать сообщение MIME в каталог файлов." ""

импорт ОС
импортировать электронную почту
импортировать миметипы

из email.policy import default

из argparse import ArgumentParser


def main ():
    parser = ArgumentParser (description = "" "\
Распакуйте сообщение MIME в каталог файлов."" ")
    parser.add_argument ('- d', '--directory', required = True,
                        help = "" "Распакуйте сообщение MIME в названный
                        каталог, который будет создан, если он еще не
                        существовать.""")
    parser.add_argument ('файл сообщений')
    args = parser.parse_args ()

    с open (args.msgfile, 'rb') как fp:
        msg = email.message_from_binary_file (fp, policy = default)

    пытаться:
        os.mkdir (каталог args.directory)
    кроме FileExistsError:
        проходить

    counter = 1
    для части в сообщении.ходить():
        # multipart / * - это просто контейнеры
        если part.get_content_maintype () == 'multipart':
            Продолжить
        # Приложения должны действительно дезинфицировать данное имя файла, чтобы
        # сообщение электронной почты нельзя использовать для перезаписи важных файлов
        имя_файла = part.get_filename ()
        если не имя файла:
            ext = mimetypes.guess_extension (part.get_content_type ())
            если не доб .:
                # Используйте универсальное расширение пакета битов
                ext = '.мусорное ведро
            filename = f'part- {counter: 03d} {ext} '
        счетчик + = 1
        с open (os.path.join (args.directory, filename), 'wb') как fp:
            fp.write (part.get_payload (decode = True))


если __name__ == '__main__':
    главный()
 

Вот пример того, как создать сообщение HTML с альтернативной простой текстовая версия. Чтобы было немного интереснее, мы добавили связанный изображение в html-части, и мы сохраняем копию того, что мы собираемся отправить диск, а также отправив его.

 #! / Usr / bin / env python3

импортировать smtplib

из email.message импорт EmailMessage
из email.headerregistry import Address
из email.utils import make_msgid

# Создать базовое текстовое сообщение.
msg = EmailMessage ()
msg ['Subject'] = "Ayons asperges pour le déjeuner"
msg ['From'] = Address ("Pepé Le Pew", "pepe", "example.com")
msg ['To'] = (Адрес ("Пенелопа Кошечка", "Пенелопа", "example.com"),
             Адрес ("Fabrette Pussycat", "fabrette", "example.com"))
msg.set_content ("" "\
Салют!

Cela ressemble à un превосходный получатель [1] déjeuner.[1] http://www.yummly.com/recipe/Roasted-Asparagus-Epicurious-203718

- Пепе
"" ")

# Добавить версию в формате html. Это преобразует сообщение в составной / альтернативный
# контейнер, с исходным текстовым сообщением в качестве первой части и новым html
# сообщение как вторая часть.
asparagus_cid = make_msgid ()
msg.add_alternative ("" "\

   
  
    

Салют!

Cela ressemble à un perfect получатель déjeuner.

"" ".format (asparagus_cid = asparagus_cid [1: -1]), subtype = 'html') # обратите внимание, что нам нужно убрать <> с msgid для использования в html. # Теперь добавьте связанное изображение в html-часть. с open ("roasted-asparagus.jpg", 'rb') как img: msg.get_payload () [1] .add_related (img.read (), 'изображение', 'jpeg', cid = asparagus_cid) # Сделайте локальную копию того, что мы собираемся отправить. с открытым ('исходящий.msg ',' wb ') как f: f.write (байты (сообщение)) # Отправить сообщение через локальный SMTP-сервер. с smtplib.SMTP ('localhost') как s: s.send_message (сообщение)

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

 импорт ОС
import sys
импортировать временный файл
импортировать миметипы
импортировать веб-браузер

# Импортируйте модули электронной почты, которые нам понадобятся
из политики импорта электронной почты
из email.parser импортировать BytesParser

# Воображаемый модуль, который сделает эту работу безопасной.
из воображаемого импорта magic_html_parser

# В реальной программе вы получите имя файла из аргументов.с open ('outgoing.msg', 'rb') как fp:
    msg = BytesParser (policy = policy.default) .parse (FP)

# Теперь к элементам заголовка можно обращаться как к словарю, и любой не-ASCII будет
# преобразовать в юникод:
print ('Кому:', msg ['Кому'])
print ('От:', сообщение ['от'])
print ('Тема:', msg ['тема'])

# Если мы хотим распечатать предварительный просмотр содержимого сообщения, мы можем извлечь все
# наименее отформатированная полезная нагрузка и вывести первые три строки. Конечно,
# если в сообщении нет простой текстовой части, печатаем первые три строки html
#, вероятно, бесполезен, но это всего лишь концептуальный пример.простой = msg.get_body (список предпочтений = ('простой', 'HTML'))
Распечатать()
print (''. join (simplest.get_content (). splitlines (keepends = True) [: 3]))

ans = input ("Просмотреть сообщение полностью?")
если ans.lower () [0] == 'n':
    sys.exit ()

# Мы можем извлечь самую богатую альтернативу, чтобы отобразить ее:
richest = msg.get_body ()
partfiles = {}
если самый богатый ['content-type']. maintype == 'text':
    если самый богатый ['content-type']. subtype == 'plain':
        для строки в richest.get_content (). splitlines ():
            печать (строка)
        sys.выход()
    elif richest ['content-type']. subtype == 'html':
        тело = самый богатый
    еще:
        print ("Не знаю, как отображать {}". format (richest.get_content_type ()))
        sys.exit ()
elif richest ['content-type']. content_type == 'multipart / related':
    body = richest.get_body (список предпочтений = ('html'))
    для части в richest.iter_attachments ():
        fn = part.get_filename ()
        если fn:
            extension = os.path.splitext (part.get_filename ()) [1]
        еще:
            extension = mimetypes.угадать_расширение (part.get_content_type ())
        с tempfile.NamedTemporaryFile (суффикс = extension, delete = False) как f:
            f.write (part.get_content ())
            # снова удалите <>, чтобы перейти от формы электронной почты cid к форме html.
            partfiles [часть ['content-id'] [1: -1]] = f.name
еще:
    print ("Не знаю, как отображать {}". format (richest.get_content_type ()))
    sys.exit ()
с tempfile.NamedTemporaryFile (mode = 'w', delete = False) как f:
    # Magic_html_parser нужно переписать href = "cid :.... "атрибуты
    # указывают на имена файлов в partfiles. Он также должен провести безопасную дезинфекцию
    # HTML. Это можно было бы написать с помощью html.parser.
    f.write (magic_html_parser (body.get_content (), файлы частей))
webbrowser.open (имя файла)
os.remove (имя файла)
для fn в partfiles.values ​​():
    os.remove (fn)

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

До приглашения вывод из приведенного выше:

 Кому: Пенелопа Кошечка <Пенелопа @ example.com>, Fabrette Pussycat 
От: Пепе Ле Пью 
Тема: Ayons asperges pour le déjeuner

Салют!

Cela ressemble à un превосходный получатель [1] déjeuner.
 

Сноски

Отправка электронных писем с функциями React и Cloud

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

Давайте узнаем, как использовать бессерверный подход с облачными функциями на Firebase и почтовую службу под названием Nodemailer , чтобы упростить эту задачу!

Вы получите код полностью работающей формы React с проверкой , с потрясающим стилем компонентов Material UI и кодом облачной функции , которые вы можете использовать в своих проектах! !

Ознакомьтесь с функциональностью формы React здесь 👉 Откройте живое приложение.

Репозиторий GitHub формы React и облачной функции находится здесь 👉 Открыть репозиторий GitHub

👉 Особая благодарность Себастьяну Галлардо, написавшему облачную функцию для этой статьи.

Оглавление:

Примечание: если вы хотите развернуть облачную функцию в облаке, вам понадобится кредитная карта, хотя с вас не будет взиматься плата, если вы не активируете ее более 2 миллионов раз в месяц.

# Front-end и back-end роли

Роль формы React заключается в сборе информации, которую вводят пользователи, и последующей отправке ее внутреннему коду, который фактически отправляет электронное письмо, которое будет облачной функцией в Это дело.

Но почему мы не можем просто отправить электронное письмо со стороны клиента (прямо из приложения React)? Поскольку учетные данные поставщика электронной почты не могут быть сохранены в приложении React, где пользователи могут получить доступ к его коду, проверив его.

# Приступим!

В этом разделе мы создадим контактную форму с React со следующими функциями:

компонентов пользовательского интерфейса материала , чтобы она выглядела хорошо.

Проверка , чтобы обеспечить лучший UX.Форма может быть отправлена ​​только в том случае, если все поля не пусты и адрес электронной почты имеет соответствующую форму.

-A Spinner , чтобы показать, что что-то в пути.

Snackbars , чтобы проинформировать пользователя о результате действия.

Так выглядит форма:

Итак, приступим и приступим к ее созданию:

  1. Создать приложение React:

Запустите эти команды на терминале, чтобы создать новое приложение React:

 
 

npx create-react-app nodemailer-form

cd nodemailer-form

  1. Добавить UI материала:

Чтобы установить зависимости UI материала, запустите это:

 
 

npm install @ material-ui / core

npm install @ material-ui / lab

Обратите внимание, что react> = 16.8.0 и react-dom> = 16.8.0 — это одноранговые зависимости.

Material UI предоставляет нам готовые компоненты React в стиле, которые мы можем использовать сразу, и они реализуют Material, систему дизайна, созданную Google, чтобы помочь командам создавать высококачественные цифровые возможности для Android, iOS, Flutter и Интернета. .

Другими словами, использование Material UI придаст нашей форме вид, похожий на приложение.

  1. Добавить шрифт Roboto:

Пользовательский интерфейс Material-UI был разработан с учетом шрифта Roboto.

Один из способов добавления — через CDN:

 
 

rel = "stylesheet"

href = "https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap. "

/>

Указанный выше тег должен быть добавлен внутри тегов .

Другой способ установить шрифт — через npm. Вы можете узнать, как это сделать, здесь.

  1. Создайте форму , вставив этот код в src / App.js файл:
 
 

импорт {useState} из «реагировать»;

импорт './App.css';

импортировать текстовое поле из '@ material-ui / core / TextField';

импортировать сетку из '@ material-ui / core / Grid';

кнопка импорта из '@ material-ui / core / Button';

import Box из '@ material-ui / core / Box';

импортировать CircularProgress из '@ material-ui / core / CircularProgress';

импортировать Snackbar из '@ material-ui / core / Snackbar';

импорт {Alert} из '@ material-ui / lab';

импортировать {makeStyles} из '@ material-ui / core / styles';

const useStyles = makeStyles ((theme) => ({

honeypot: {

display: 'none',

},

}));

функция App () {

const classes = useStyles ();

const [ошибка, setError] = useState (false);

константа [openSnackbar, setOpenSnackbar] = useState (false);

константа [isLoading, setIsLoading] = useState (ложь);

константа [formIsValid, setFormIsValid] = useState (ложь);

const [contactForm, setContactForm] = useState ({

name: {

value: '',

elementConfig: {

required: true,

id: 'standard-basic',

label: ' Ваше имя »,

},

проверка: {

требуется: истина,

ошибка Сообщение:« Пожалуйста, введите свое имя »,

},

действительно: ложь,

размытие: ложь,

} ,

email: {

value: '',

elementConfig: {

required: true,

id: 'standard-basic',

label: 'Your Email',

},

проверка : {

требуется: true,

isEmail: true,

errorMessage: 'Пожалуйста, введите свой адрес электронной почты',

},

valid: false, 900 05

blur: false,

},

message: {

value: '',

elementConfig: {

required: true,

id: 'standard-multiline-static',

label: ' Ваше сообщение ',

multiline: true,

rows: 4,

},

validation: {

required: true,

errorMessage:' Пожалуйста, введите ваше сообщение ',

},

действительно : false,

blur: false,

},

honeypot: {

value: '',

elementConfig: {

className: classes.honeypot,

label:

'Если вы человек, не вводите здесь ничего. Я здесь, чтобы обмануть ботов »,

},

validation: {},

valid: true,

blur: false,

},

});

const formElementsArray = [];

для (введите ключ в contactForm) {

formElementsArray.push ({

id: key,

... contactForm [key],

});

}

const formElements = formElementsArray.map ((element) => {

return (

{... element.elementConfig}

error = {! element.valid && element. blur}

helperText = {

! element.valid && element.blur

? element.validation.errorMessage

: null

}

onChange = {(event) => inputChangedHandler (event, element.id)}

onBlur = {(event) => inputChangedHandler (event, element.id)}

value = {element.value}

>

);

});

const inputChangedHandler = (event, inputIdentifier) ​​=> {

const updatedFormElement = {

... contactForm [inputIdentifier],

значение: event.target.value,

допустимо: checkValidity (

event.target.value,

contactForm [inputIdentifier] .validation

),

blur: event.type == 'blur'? true: false,

touch: true,

};

const updatedContactForm = {

... contactForm,

[inputIdentifier]: updatedFormElement,

};

пусть formIsValid = true;

для (пусть inputElementIdentifier в updatedContactForm) {

formIsValid =

updatedContactForm [inputElementIdentifier]._` {|} ~ -] +) * @ (?: [a-z0-9] (?: [a-z0-9 -] * [a-z0-9])? \.) + [a- z0-9] (?: [a-z0-9 -] * [a-z0-9])? /;

isValid = pattern.test (значение) && isValid;

}

возврат isValid;

};

const closeSnackbar = () => {

setOpenSnackbar (false);

};

const submitForm = () => {

if (contactForm.honeypot.value! = '') {

return;

}

setIsLoading (истина);

const fakeCloudFunction = (data) => {

console.журнал (данные);

вернуть новое обещание ((разрешить, отклонить) => {

const error = Math.random ()> 0,5? True: false;

setTimeout (() => {

if (! Error) {

resolve ();

} else {

reject ();

}

}, 1000);

});

};

fakeCloudFunction ({

name: contactForm.name.value,

email: contactForm.email.value,

message: contactForm.message.value,

})

.then (() => {

let originalContactForm = {};

for ( введите ключ в contactForm) {

originalContactForm [key] = {

... contactForm [key],

value: '',

valid: key == 'honeypot'? true: false,

blur: false,

};

}

setContactForm (originalContactForm);

setFormIsValid (false);

setError (false);

setIsLoading (false);

setOpenSnackbar (true);

setOpenSnackbar (true) .catch (() => {

setError (true);

setIsLoading (false);

setOpenSnackbar (true);

});

};

return (

Отправьте нам сообщение

Мы скоро свяжемся с вами.

{formElements}

{isLoading? (

): (

)}

{ ошибка ? (

open = {openSnackbar}

onClose = {closeSnackbar}

anchorOrigin = {{vertical: 'top', horizontal: 'center'}}

>

К сожалению, что-то пошло не так, повторите попытку позже.

): (

open = {openSnackbar}

autoHideDuration = {2000}

onClose = {closeSnackbar}

anchorOrigin = {{vertical: 'top', horizontal: 'center'}}

>

Сообщение отправлено!

)}

) ;

}

приложение для экспорта по умолчанию;

В приведенном выше коде есть фиктивная реализация облачной функции под названием fakeCloudFunction , использующая функцию с обещанием и setTimeout () , но она будет заменена в следующих разделах реальной облачной функцией, которая фактически отправляет и отправляет по электронной почте данные, которые мы предоставляем в форме.

Если вас ошеломляет длина и сложность компонента App.js , содержащего форму, загляните в этот курс Academind: React — Полное руководство (включая хуки, React Router, Redux), и тогда вы чувствовать себя как дома, снова читая код. Код формы был скопирован оттуда и объяснен шаг за шагом.

  1. Протестируйте форму:

Чтобы проверить форму вручную, запустите эту команду для обслуживания приложения:

 
 

npm start

, а затем откройте вкладку в браузере и перейдите к localhost: 3000 , чтобы увидеть форму.Попробуйте щелкнуть поля и оставить их пустыми, чтобы проверить, работает ли проверка. Также попробуйте добавить неверный адрес электронной почты и посмотрите, что произойдет.

  1. Протестируйте приманку:

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

 
 

honeypot: {

value: '',

elementConfig: {

className: классы.honeypot,

этикетка: «Если вы человек, не вводите здесь ничего. Я здесь, чтобы обмануть ботов »,

},

проверка: {

},

действительно: правда,

размытие: ложь

}

 
 

const submitForm = () => {

if (contactForm.honeypot.value! = '') {

return

}

(...)

}

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

Итак, чтобы протестировать приманку, просто измените вручную состояние contactForm в src / App.js , заменив contactForm.honeypot.value с '' на такое число, как 1 или a строка вроде этой: эй, я бот, заполнивший эту форму! .

После выполнения вышеуказанного изменения вы все равно сможете нажать кнопку Отправить , но fakeCloudFunction () не будет вызываться. Вы можете убедиться в этом, посмотрев на консоль в инструментах разработчика в браузере.Вы не должны видеть данные, зарегистрированные из формы, которая регистрируется в консоли изнутри fakeCloudFunction () .

Отлично! У нас есть форма , уже работающая и проверенная вручную! Давайте теперь заменим fakeCloudFunction () на реальную в следующих разделах.

# Платите за то, что используете

Теперь пора сосредоточиться на внутреннем коде, который отправляет электронное письмо.

Обычно для обработки этой задачи создается внутреннее приложение, которое, например, может быть создано с помощью Express, запущенного на Node, которое затем необходимо развернуть на сервере, который представляет собой машину или виртуальную машину, работающую круглосуточно. 7.

Счет за этот сервер по-прежнему должен быть оплачен, даже если внутреннее приложение вообще не используется.

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

Есть еще проблемы, которые решают облачные функции, и вы можете найти их в этом видео Academind Youtube.

# Что такое облачные функции для Firebase?

Облачные функции для Firebase — это бессерверная среда , которая позволяет автоматически запускать внутренний код в ответ на события, инициированные функциями Firebase и запросами HTTPS.

Ваш код JavaScript или TypeScript хранится в облаке Google и работает в управляемой среде. Нет необходимости управлять собственными серверами и масштабировать их.

Подробнее о них читайте в документации.

Если вы хотите узнать больше о serverless , вы можете ознакомиться с этим курсом Academind: AWS Serverless API & Apps — A Complete Introduction, который использует AWS вместо Firebase.

# Время настройки функции облака!

Выполните следующие действия, чтобы написать свою первую облачную функцию:

  1. Создайте проект firebase:

В консоли Firebase щелкните Добавить проект , затем выберите или введите имя проекта .Вы можете назвать его nodemailer form , но не стесняйтесь выбирать что-нибудь другое.

Если у вас возникли проблемы с настройкой проекта, прочтите эту документацию.

  1. Установите интерфейс командной строки Firebase:

Выполните на своем терминале следующее:

 
 

npm install -g firebase-tools

Это устанавливает глобально доступную команду firebase. Если команда не работает, вам может потребоваться изменить разрешения npm.

  1. Инициализируйте свой проект:

    a) Запустите

 
 

firebase login

, чтобы войти через браузер и аутентифицировать инструмент firebase.

b) Инициализируйте проект firebase, запустив:

 
 

firebase init

c) Вам будет предложен следующий вопрос:

 
 

? Какие функции Firebase CLI вы хотите настроить для этой папки? Нажмите пробел, чтобы выбрать функции, затем нажмите Enter, чтобы подтвердить свой выбор

es. (Нажмите <пробел>, чтобы выбрать, , чтобы переключить все, , чтобы инвертировать выбор)

❯ ◯ База данных: настройка базы данных Firebase Realtime и развертывание правил

◯ Firestore: разверните правила и создайте индексы для Firestore

◯ Функции: настройка и развертывание облачных функций

◯ Хостинг: настройка и развертывание сайтов хостинга Firebase

◯ Хранилище: развертывание правил безопасности облачного хранилища

◯ Эмуляторы: настройка локальных эмуляторов для функций Firebase

◯ Удаленная настройка: получение, развертывание, и конфигурации отката для Remote Config

Давайте выберем этот вариант:

 
 

❯ ◯ Функции: настройка и развертывание облачных функций

d) Затем вам будет предложено следующее:

 
 

== = Project Setup

Во-первых, давайте свяжем этот каталог проекта с проектом Firebase.Вы можете создать несколько псевдонимов проекта, запустив firebase use --add, но пока мы просто настроим проект по умолчанию.

? Выберите один из вариантов: (Используйте клавиши со стрелками)

❯ Использовать существующий проект

Создать новый проект

Добавить Firebase в существующий проект Google Cloud Platform

Не настраивать проект по умолчанию

Выберите это option:

 
 

❯ Использовать существующий проект

e) Нас спросят, какой проект, и выберите проект, который вы создали на шаге 1.

 
 

? Выберите проект Firebase по умолчанию для этого каталога:

❯ {your-project-name-xxxxx} ({your-project-name})

(...)

Где зависит от имени вашего проекта о том, как вы назвали свой проект. xxxxx символов выбираются Firebase автоматически.

Затем мы увидим это:

 
 

=== Настройка функций

В вашем проекте будет создан каталог функций с Node.js

предварительно настроен. Функции могут быть развернуты с помощью firebase deploy.

? На каком языке вы хотите писать облачные функции? (Используйте клавиши со стрелками)

❯ JavaScript

TypeScript

Давайте выберем:

 
 

❯ JavaScript

f) Теперь нас спрашивают о ESLint:

 
 

? Вы хотите использовать ESLint для обнаружения возможных ошибок и обеспечения соблюдения стиля? (да / нет)

Давайте выберем:

 
 

N

, чтобы упростить этот урок.

g) На этом этапе некоторые файлы были созданы внутри новой папки с именем functions :

 
 

✔ Написал functions / package.json

✔ Написал functions / index.js

✔ Написал functions / .gitignore

? Вы хотите установить зависимости с помощью npm сейчас? (Да / нет)

Нас спрашивают об установке всех зависимостей в папку / functions . Выберем:

 
 

y

Если весь процесс настройки прошел хорошо, мы увидим следующее:

 
 

i Запись информации о конфигурации в firebase.json ...

i Запись информации о проекте в .firebaserc ...

✔ Инициализация Firebase завершена!

i) Давайте установим еще пару зависимостей, которые нам понадобятся в нашей облачной функции, но сначала обязательно перейдите к / functions с помощью вашего терминала:

 
 

cd functions

Теперь, проверьте, что вы в настоящее время находитесь на your-react-project-name / functions , посмотрев на терминал. Если вы не уверены, просто проверьте это, запустив:

 
 

pwd

Теперь, когда вы уверены, что находитесь в нужном месте, запустите эту команду, чтобы установить nodemailer и cors модули:

 
 

npm i nodemailer cors

# Давайте наконец напишем облачную функцию

Все облачные функции, которые мы хотим использовать, должны быть экспортированы из functions / index.js файл. Поскольку у этого проекта есть только одна функция, давайте определим ее и экспортируем в этот файл.

В качестве примечания, когда у вас несколько функций, лучше создать для них разные файлы и импортировать и экспортировать их внутри functions / index.js .

На электронную почту будет отправлено с использованием Nodemailer , модуля, который мы уже установили, для приложений Node.js, чтобы можно было легко отправлять электронную почту;)

Итак, давайте напишем и экспортируем облачную функцию внутри функции / index.js :

 
 

const functions = require ('firebase-functions');

const nodemailer = require ('nodemailer');

const cors = require ('cors') ({origin: true});

let transporter = nodemailer.createTransport ({

host: 'your host',

port: your - port - number,

secure: true,

auth: {

user: 'your @ email',

пароль: 'ваш пароль.',

},

});

экспорт.sendEmail = functions.https.onRequest ((req, res) => {

console.log (

'из функции sendEmail. Объект запроса:',

JSON.stringify (req.body)

);

cors (req, res, () => {

const email = req.body.data.email;

const name = req.body.data.name;

const message = req.body.data. message;

const mailOptions = {

from: email,

to: `your @ email`,

subject: 'New message from the nodemailer-form app',

text:` $ {name} говорит: $ {message} `,

};

возвратный транспортер.sendMail (mailOptions, (error, info) => {

if (error) {

return res.status (500) .send ({

data: {

status: 500,

message: error.toString) (),

},

});

}

return res.status (200) .send ({

data: {

status: 200,

message: 'sent',

}) ,

});

});

});

});

Мы используем промежуточное ПО cors () …но для чего это? Это помогает нам управлять, из каких URL-адресов запросов могут быть отправлены в нашу облачную функцию. На этапе разработки конфигурация ниже используется для вызова функции с любого URL-адреса:

 
 

const cors = require ('cors') ({origin: true});

Здесь можно посмотреть документацию по конфигурации транспортера . Чтобы заполнить обязательные поля, такие как host , port и auth , вам нужно перейти к своему провайдеру электронной почты и найти их.

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

Поздравляем, ! Вы только что создали свою первую облачную функцию!

# Запуск локального эмулятора

Момент истины настал: пора посмотреть, правильно ли работает наша облачная функция. Сделаем это локально с помощью локального эмулятора ; запустите это в терминале:

 
 

эмуляторы firebase: start --only functions

После выполнения приведенной выше команды нам должно быть предложено следующее:

 
 

✔ functions [sendEmail]: http функция инициализирована (http : // localhost: 5001 / {имя-вашего-проекта} / {расположение-сервера} / sendEmail).

, где имя-вашего-проекта и расположение-сервера зависит от того, как вы настроили проект Firebase на шаге 1 времени настройки облачной функции! раздел.

Чтобы узнать больше о локальном эмуляторе, прочтите эти документы.

#Using Postman

Чтобы протестировать облачную функцию, уже работающую локально на http: // localhost: 5001 / {your-project-name} / {server-location} / sendEmail , мы откроем Postman, который это программное обеспечение, которое позволяет нам вызывать конечные точки и тестировать их индивидуально.Вы можете скачать это здесь.

Чтобы проверить функцию облака, выполните следующие действия:

Похоже, что функция облака успешно отправила электронное письмо. Теперь перейдите в почтовый ящик вашего почтового провайдера и проверьте, получили ли вы письмо, отправленное с функцией:

Отлично! , вы успешно протестировали свою облачную функцию, работающую локально.

Теперь пора развернуть его в облаке!

Первым шагом к развертыванию облачной функции в облаке является изменение плана, связанного с проектом Firebase, на Blaze, который является платным, как вы планируете , но он имеет щедрые бесплатные квоты, например.g 2M вызовов в месяц для облачных функций, бесплатно! .

Вы можете проверить бесплатные квоты и расценки здесь.

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

# Обновление до плана Blaze

Следуйте этим инструкциям, чтобы изменить план и настроить предупреждение о бюджете:

# Давайте, наконец, развернем его!

Чтобы окончательно развернуть облачную функцию в облаке, выполните следующую команду:

 
 

firebase deploy --only functions

Затем мы увидим это:

 
 

=== Развертывание на вашем -название проекта'...

i развертывание функций

i functions: обеспечение включения необходимого API cloudfunctions.googleapis.com ...

i functions: обеспечение включения необходимого API cloudbuild.googleapis.com ...

✔ functions: необходимый API cloudbuild.googleapis.com включен

✔ functions: требуется API cloudfunctions.googleapis.com включен

i functions: подготовка каталога функций для загрузки ...

i functions: упакованные функции (21.64 КБ) для загрузки

✔ функции: папка функций успешно загружена

i функции: создание Node.js 12 функция sendEmail ({server-location}) ...

✔ functions [sendEmail ({server-location})] : Успешная операция создания.

URL-адрес функции (sendEmail): https: // {server-location} - {your-project-name-xxxxx} .cloudfunctions.net / sendEmail

✔ Развертывание завершено!

Потрясающе! Теперь мы готовы снова протестировать его с помощью Postman!

Этот тест аналогичен тому, что мы проводили в разделе «Использование почтальона», но вместо этого отправляем запрос по этому URL: https: // {server-location} - {your-project-name-xxxx}.cloudfunctions.net/sendEmail .

Например, если имя вашего проекта — nodemailer-form-akfhs , а сервер — us-central1 , то URL-адрес будет: https: //us-central1-nodemailer-form-akfhs.cloudfunctions. сеть / sendEmail .

Вы должны увидеть успешный ответ на Postman и новое электронное письмо в вашем почтовом ящике, если все прошло хорошо.

Теперь пора вызвать облачную функцию из нашего приложения React и избавиться от fakeCloudFunction .

Мы могли бы просто сделать HTTP-запрос POST на https: // {server-location} - {your-project-name-xxxxx} .cloudfunctions.net / sendEmail , но есть способ лучше: мы можем использовать Firebase SDK, который позволяет нам легко взаимодействовать с различными сервисами Firebase, такими как облачные функции, изнутри нашего приложения.

# Регистрация приложения в Firebase

Первым шагом к добавлению SDK является регистрация приложения и копирование firebaseConfig :

# Добавление Firebase SDK

Мы собираемся добавить Firebase SDK через npm в наш проект .

Откройте терминал в корне вашего проекта и запустите эту команду:

 
 

npm i firebase

Эта команда установит модуль firebase внутри папки node_modules на корневом уровне нашего проекта. , но не внутри functions / node_modules .

Теперь создайте файл src / firebase.js (или любое другое имя) и вставьте это:

 
 

import firebase from firebase;

const firebaseConfig = {

apiKey: '{your-apiKey}',

authDomain: '{your-authDomain}',

projectId: '{your-projectId}',

storageBucket: '{your- storageBucket} ',

messagingSenderId:' {your-messagingSenderId} ',

appId:' {your-appId} ',

measureId:' {your-measureId} ',

};

firebase.initializeApp (firebaseConfig);

firebase.functions ();

firebase.analytics ();

экспорт firebase по умолчанию;

Давайте узнаем, внесем следующие изменения в src / App.js :

 
 

import firebase from './firebase';

const sendEmail = firebase.functions (). HttpsCallable ('sendEmail');

function App () {

const submitForm = () => {

sendEmail ({

name: contactForm.name.value,

электронная почта: contactForm.email.value,

сообщение: contactForm.message.value

}).

, затем (() => {

(...)

})

.catch (() => {

(...)

})

}

Мы используем метод httpCallable () , чтобы напрямую указать на конкретную облачную функцию, просто передав имя облачной функции, которое в данном случае является sendEmail .

Метод httpCallable () можно использовать только тогда, когда облачная функция была определена с помощью функций. Http () backend API , что верно в нашем случае (вы можете проверить functions / index.js , чтобы убедиться, что мы его использовали).

Вот и все! Это все, что нужно для настройки, чтобы наконец вызвать облачную функцию из приложения React.

Давайте теперь проверим.

Давайте обслужим приложение в разработке, запустив:

 
 

npm start

и откройте браузер на localhost: 3000 .

Теперь заполните форму и отправьте ее. Снэкбары должны сообщить вам, был ли запрос успешным или нет. Если вы действительно хотите быть уверенным, откройте инструменты разработчика браузера, перейдите в сеть и проверьте тело ответа на запрос.

Для завершения теста перейдите в свой почтовый ящик и убедитесь, что вы получили письмо.

При желании вы также можете развернуть приложение React в Firebase, выполнив следующие действия.

В качестве последнего шага вы можете изменить настройку промежуточного программного обеспечения cors облачной функции, добавив в белый список URL развернутого приложения.

 
 

const cors = require ('cors') ({origin: '{your-deployed-app-URL}'});

Таким образом, запросы в браузере могут выполняться только из развернутого приложения, а не из других URL-адресов.

Если вы повторно развернете облачную функцию после изменения конфигурации cors и запустите приложение локально на localhost: 3000 , вы должны увидеть следующую ошибку на консоли инструментов разработчика вашего браузера при отправке формы:

 
 

Доступ для выборки по адресу https: // us-central1-nodemailer-form-8fdf0.cloudfunctions.net/sendEmail 'from origin' http: // localhost: 3000 'был заблокирован политикой CORS: ответ на предварительный запрос не проходит проверку контроля доступа: заголовок' Access-Control-Allow-Origin 'отсутствует запрашиваемый ресурс. Если непрозрачный ответ соответствует вашим потребностям, установите режим запроса на 'no-cors', чтобы получить ресурс с отключенным CORS.

Но если вы заполните форму с URL-адреса развернутого приложения, вы не должны увидеть никаких ошибок, связанных с CORS.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *