Как отправить электронную почту на С# без ввода пароля?

Как отправить электронное письмо без ввода пароля?

Я сделал это:

client.Port = 587;
client.Host = "smtp.gmail.com";
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = true;
client.EnableSsl = true;
MailMessage mail = new MailMessage();
mail.From = new MailAddress(emailtxt.Text.Trim());
mail.To.Add("myadressemail@gmail.com");
mail.Subject = "test";
mail.Body = "test";
mail.IsBodyHtml = true;
client.Send(mail);

Можно ли отправить электронное письмо на Gmail без авторизации? Если нет, то есть ли лучшие альтернативы?

Менее безопасные приложения отключены.

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

Lasse V. Karlsen 16.05.2022 21:43

Gmail потребует некоторой формы аутентификации, независимо от того, отправляете ли вы электронные письма через SMTP или используете их специальный API, который они предоставляют. В противном случае любой мог бы выдать себя за кого угодно, и Gmail перестал бы быть полезным. Какова цель этого письма? Какое-то уведомление?

mason 16.05.2022 21:43

@mason Это контактная форма. Пользователь может отправить нам электронное письмо с некоторыми проблемами или вопросом.

lolorekkk 16.05.2022 21:47

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

Lasse V. Karlsen 16.05.2022 21:48

@LasseV.Karlsen Так что мне делать. Я не могу заставить пользователя ввести пароль пользователя. Или я могу?

lolorekkk 16.05.2022 21:51

Вы мог, но это не рекомендуется. Вместо этого создайте специальную учетную запись электронной почты для вашего приложения, чтобы отправлять электронные письма, например «noreply@example.com» или «notifications@example.com», а затем отправьте электронное письмо от этой учетной записи.

mason 16.05.2022 21:53

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

Lasse V. Karlsen 16.05.2022 21:54

Хорошо, но когда пользователь отправляет письмо НАМ. Я хочу увидеть его адрес электронной почты, потому что, например, я хочу отправить ему что-нибудь в ответ.

lolorekkk 16.05.2022 21:55

Итак, попросите пользователя указать адрес электронной почты при заполнении формы. Затем вы можете добавить его в тело или тему электронного письма или использовать заголовок Reply-To.

mason 16.05.2022 21:58

@mason, звучит хорошо.

lolorekkk 16.05.2022 22:00

@mason, а теперь можно скрыть в `mail.To.Add("myadressemail@gmail.com")` адрес электронной почты? чтобы его не было видно с уровня кода для пользователей

lolorekkk 16.05.2022 22:03

Я не понимаю, что вы имеете в виду, скрывая это. Вы говорите об обфускации кода? Что это за приложение? АСП.НЕТ? Выиграть формы? ВПФ?

mason 16.05.2022 22:11

@mason Да, запутывает. WinForm (.NET/С#)

lolorekkk 16.05.2022 22:13

Целеустремленный пользователь всегда сможет перепроектировать запутанное приложение. Единственный верный способ помешать им что-то получить — это вообще не давать им это. Поэтому вам нужно либо изменить поведение электронной почты, чтобы не полагаться на наличие учетных данных, запустив программу электронной почты пользователя по умолчанию, предварительно заполненную адресом вашей компании в строке «Кому», либо заставить приложение Win Forms обмениваться данными через сети к конечной точке, которую вы контролируете (например, к размещенному вами HTTP API), и пусть этот API будет отвечать за отправку электронной почты.

mason 16.05.2022 22:19

Вы в значительной степени спрашиваете, как сделать подделку электронной почты; как уже упоминалось, «хорошая практика» в контактных формах состоит в том, чтобы иметь свой собственный внутренний, выделенный адрес электронной почты И запрашивать у пользователя / клиента их адрес электронной почты как часть контактной формы.

Josh Part 16.05.2022 23:10
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
15
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Is it possible to send an email to Gmail without an authorization?

Нет

If not, are there any better alternatives?

Как упоминает Мейсон в комментариях, основными альтернативами являются:

  1. Используйте ссылку mailto, чтобы открыть программу электронной почты пользователя по умолчанию для отправки сообщения. Это, очевидно, покажет адрес электронной почты, но, по-видимому, это произойдет в любом случае, если вы ответите на их электронную почту.
  2. Настройте простой веб-API, который получает сообщения от вашего приложения и перенаправляет их на внутренний smtp-сервер или в какую-либо другую систему для обработки сообщений. Если вы хотите ответить пользователю по электронной почте, вам нужно будет попросить его / ее адрес электронной почты. Если вы хотите убедиться, что адрес электронной почты правильный, вы можете отправить электронное письмо с автоматическим подтверждением на адрес и переслать сообщение только после того, как адрес будет проверен.

В современном Интернете нет реального способа обойти необходимость аутентификации. Современный способ справиться с этим в автоматизированных системах обычно заключается в использовании сертификатов и API-ключей, но электронная почта — довольно старый протокол с более ограниченными методами аутентификации.

Другие вопросы по теме