Нашёл образец кода на форуме, сделал всё по шаблону, вроде и отправляет сообщения, а как только другу отправил приложение потестить так приходят сообщения будь-то я их себе отправляю. Как сделать отправку от введенного адреса:
private void button1_Click_1(object sender, EventArgs e)
{
string fromUser = richTextBox1.Text;
int mark = trackBar1.Value;
string uemail = textBox1.Text;
try
{
MailAddress from = new MailAddress (uemail);
MailAddress to = new MailAddress ("Мой маил");
MailMessage m = new MailMessage (from,to);
m.Subject = "Твое приложение оценили!";
m.IsBodyHtml = false;
m.Body = "Your mark is " + mark + "\n" + fromUser;
SmtpClient smtp = new SmtpClient ("smtp.gmail.com", 587)
{
Credentials = new NetworkCredential ("Мой маил", "пароль приложения"),
EnableSsl = true
};
smtp.Send (m);
MessageBox.Show ("Сообщение успешно отправлено. Спасибо!");
Close ( );
}
catch (FormatException)
{
MessageBox.Show ("Неверный формат электронной почты. Почта должна иметь окончания - @gmail/yandex/mail/bk/list и другие");
textBox1.Text = "";
}
catch (ArgumentException)
{
MessageBox.Show ("Строка с адресом не должна быть пуста");
}
catch (Exception ex)
{
MessageBox.Show (ex.HelpLink);
}
}
Ваш код необходимо переписать следующим образом:
string fromUser = richTextBox1.Text; // Получим комментарий пользователя
int mark = trackBar1.Value; // Получим оценку приложения
string uemail = textBox1.Text; // Получим Email пользователя
string upassword = *.Text; // Нам понадобится и пароль от Email пользователя
// Как Вы понимаете, рассылать что-то от имени
// чужого аккаунта просто так не получится,
// Так что без авторизации никуда!
try
{
MailAddress from = new MailAddress(uemail);
MailAddress to = new MailAddress(myEmail);
MailMessage message = new MailMessage(from, to) // Формируем сообщение с нужными заголовками
// Заголовок "от кого" ныне часто игнорируется,
// и на его место ставится реальный адрес отправителя,
// так что подписаться миллионером дядей Петей не получится
{
Subject = "Твое приложение оценили!",
IsBodyHtml = false,
Body = $"Your mark is {mark}{Environment.NewLine}{fromUser}"
};
SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587)
{
Credentials = new NetworkCredential(uemail, upassword),
EnableSsl = true
};
smtp.Send(message); // Отправляем наше письмо
MessageBox.Show("Сообщение успешно отправлено. Спасибо!");
Close();
}
catch (FormatException)
{
MessageBox.Show("Неверный формат электронной почты. Почта должна иметь окончания - @gmail/yandex/mail/bk/list и другие");
textBox1.Clear();
}
catch (ArgumentException)
{
MessageBox.Show("Строка с адресом не должна быть пуста");
}
catch (Exception ex)
{
MessageBox.Show(ex.HelpLink);
}
Проблема в том, что в Вашем коде Вы проводили авторизацию на SMTP-сервере через свой аккаунт!
Тем самым, сформировав письмо, где Вы указали:
Кому (to
) = Мне
От кого (from
) = От Пользователя
Вы получили следующий результат: SMTP-клиент, переправляя заданное сообщение, учитывает только заголовок, указывающий, кому
нужно отправить письмо, полностью игнорируя заголовок от кого
, так как вместо него используется реальный адрес отправителя (то есть опять же Ваш email)
Вам необходимо реализовать нечто вроде аутентификации пользователя в его почтовом ящике (учитывайте, что приведенный мной пример, если Вы добавите TextBox
, содержащий данные о пароле пользователя, сработает лишь для аккаунтов gmail
).
Да и стоит учесть, что не всякий пользователь будет доверять какой-то программе данные от своей учетной записи. Кто же знает, вдруг Вы потом будете использовать их в своих корыстных целях? Так что я считаю, что необходимо полностью поменять подход к данной задаче
Если Ваша программа использует какую-либо удаленную базу знаний, то почему не отправлять запрос сразу к ней? Это было бы самым простым решением. В противном случае Вам придется дорабатывать свой код для аутентификации пользователей от ЯндексПочты
до самого iCloud Mail
, что является достаточно объемной задачей
UPD:
Я тут подумал, если у Вас нет удаленной БД, и Вам хотелось бы получать именно Email
-письма, то чем плох вариант отправки писем самому себе? А в заголовке или в теле письма Вы бы уже могли указать, от кого именно получено данное письмо. Вариант, конечно, кривой (к примеру, полностью отсутствует валидация введенного пользователем почтового адреса. Валидность-то можно проверить с помощью regex
, а вот правда ли данная почта принадлежит пользователю...), однако в рамках Вашей задачи, возможно, Вам этого и хватит)
Надеюсь, мой ответ хоть немного прояснил Вашу проблему. Желаю Вам удачно ее разрешить)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Является ли антипаттерном перехват всех исключений разом?
Проблема с добавление данных в БД с ипользованием Entity Framework, никак не могу понять причину, почему после добавления в БД записи с неуникальным...
Есть приложение WPF (паттерн MVVM) с двумя окнами (Авторизация и главное окно