Нашёл образец кода на форуме, сделал всё по шаблону, вроде и отправляет сообщения, а как только другу отправил приложение потестить так приходят сообщения будь-то я их себе отправляю. Как сделать отправку от введенного адреса:
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, а вот правда ли данная почта принадлежит пользователю...), однако в рамках Вашей задачи, возможно, Вам этого и хватит)
Надеюсь, мой ответ хоть немного прояснил Вашу проблему. Желаю Вам удачно ее разрешить)
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости