Пробую изучать C# нужна подсказка или помощ
Цитата: Aleksey от 11.03.2023, 21:39понял ✅, спасибо 🤝, поменял.
И всё же, как можно убрать это окно?
т.е. если я правильно понял, то в ключеshutdown -s -f -tнельзя избавится от этого окна?Ну и чтобы избавиться от уведомления можно сделать внутренний таймер, который в последний момент будет вызывать выключение и уведомление просто не успеет появиться.
можешь намекнуть, что за "внутренний таймер"?
понял ✅, спасибо 🤝, поменял.
И всё же, как можно убрать это окно?
т.е. если я правильно понял, то в ключе Скопированоshutdown -s -f -t нельзя избавится от этого окна?
Ну и чтобы избавиться от уведомления можно сделать внутренний таймер, который в последний момент будет вызывать выключение и уведомление просто не успеет появиться.
можешь намекнуть, что за "внутренний таймер"?
Цитата: yuri от 11.03.2023, 21:43Сделать так, чтобы программа внутри себя начала отсчет и после вызвала выключение.
первый попавшийся ответ гугл на timers c#
либо, через async / await, но это надо контроллировать
Сделать так, чтобы программа внутри себя начала отсчет и после вызвала выключение.
первый попавшийся ответ гугл на timers c#
либо, через async / await, но это надо контроллировать
Цитата: yuri от 11.03.2023, 21:47Сейчас проверил, у Меня такая команда не вызывает уведомлений:
shutdown /s /f /t 36000 /c " ".
Попробуй так вызывать выключение:$"shutdown -s -f -t {result} -c \" \""
Сейчас проверил, у Меня такая команда не вызывает уведомлений: Скопированоshutdown /s /f /t 36000 /c " ".
Попробуй так вызывать выключение:Скопировано$"shutdown -s -f -t {result} -c \" \""
Цитата: Aleksey от 11.03.2023, 22:20Спасибоyuri,
то, что надо 👌, сейчас работает всё, как и хотел🙌
и без таймеров обошлось😃
проект программы тут, сама программа тут. может кому-то пригодитсяДалее есть в мыслях сделать программу напоминалку, что бы например в блокнот записать все даты дней рождения, и программу синхронизировать с датой и временем компа, и например, что бы она работала в скрытом режиме (автозагрузке), наподобие умного ланчера, и как только дата настала, то эта программа выдавала например messagebox ✉ по середине экрана.
Спасибоyuri,
то, что надо 👌, сейчас работает всё, как и хотел🙌
и без таймеров обошлось😃
проект программы тут, сама программа тут. может кому-то пригодится
Далее есть в мыслях сделать программу напоминалку, что бы например в блокнот записать все даты дней рождения, и программу синхронизировать с датой и временем компа, и например, что бы она работала в скрытом режиме (автозагрузке), наподобие умного ланчера, и как только дата настала, то эта программа выдавала например messagebox ✉ по середине экрана.
Цитата: Aleksey от 15.03.2023, 19:32Всем привет 🙌
Хочу написать программу, которая будет отправлять письма на почту.
Делаю асинхронно (как на сайте metanit), ошибок нет, но письма не отправляются.
Может это из-за двухэтапной аутентификации?
[spoiler title="мой код"]using System; using System.Net; using System.Net.Mail; using System.Threading.Tasks; using System.Windows.Forms; namespace TestProject { public partial class Form1 : Form { public Form1() { InitializeComponent(); } void button1_Click(object sender, EventArgs e) { SendEmailAsync().GetAwaiter(); async Task SendEmailAsync() { MailAddress from = new MailAddress("123@gmail.com", "Отправитель"); MailAddress to = new MailAddress("321@gmail.com", "получатель"); MailMessage m = new MailMessage(from, to); m.Subject = "Тест"; m.Body = "Письмо-тест 2 работы smtp-клиента"; SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); smtp.Credentials = new NetworkCredential("123@gmail.com", "password"); smtp.EnableSsl = true; await smtp.SendMailAsync(m); } } } }
[/spoiler]
Всем привет 🙌
Хочу написать программу, которая будет отправлять письма на почту.
Делаю асинхронно (как на сайте metanit), ошибок нет, но письма не отправляются.
Может это из-за двухэтапной аутентификации?
using System;
using System.Net;
using System.Net.Mail;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TestProject
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
void button1_Click(object sender, EventArgs e)
{
SendEmailAsync().GetAwaiter();
async Task SendEmailAsync()
{
MailAddress from = new MailAddress("123@gmail.com", "Отправитель");
MailAddress to = new MailAddress("321@gmail.com", "получатель");
MailMessage m = new MailMessage(from, to);
m.Subject = "Тест";
m.Body = "Письмо-тест 2 работы smtp-клиента";
SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
smtp.Credentials = new NetworkCredential("123@gmail.com", "password");
smtp.EnableSsl = true;
await smtp.SendMailAsync(m);
}
}
}
}
Цитата: Aleksey от 16.03.2023, 17:26Всем привет
нашёл, рабочий код отправки писем на stackoverflow
[spoiler title="сам код"]string fromUser = richTextBox1.Text; // Получим комментарий пользователя int mark = trackBar1.Value; // Получим оценку приложения string uemail = textBox1.Text; // Получим Email пользователя string upassword = textBox2.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); }
[/spoiler]
Но, этот код работает, только когда нет двухэтапной аутентификации, а если есть на почте, то улетает в ошибку (ex.HelpLink).
Кто-нибудь знает, как это исправить, что бы работала программа и с двухэтапной аутентификацией ?
Всем привет
нашёл, рабочий код отправки писем на stackoverflow
string fromUser = richTextBox1.Text; // Получим комментарий пользователя
int mark = trackBar1.Value; // Получим оценку приложения
string uemail = textBox1.Text; // Получим Email пользователя
string upassword = textBox2.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);
}
Но, этот код работает, только когда нет двухэтапной аутентификации, а если есть на почте, то улетает в ошибку (ex.HelpLink).
Кто-нибудь знает, как это исправить, что бы работала программа и с двухэтапной аутентификацией ?
Цитата: Adler от 16.03.2023, 23:47Приветствую. На сколько я знаю, то для gmail для использования pop3/imap/smt через профиль на сайте генерируется специальный пароль. Погуглите на эту тему. Там это буквально в пару кликов настраивается.
P.S. Для других почтовых ящиков с поддержкой pop3/imap/smtp и двухфакторной аутентификации аналогично генерируется отдельный пароль.
Приветствую. На сколько я знаю, то для gmail для использования pop3/imap/smt через профиль на сайте генерируется специальный пароль. Погуглите на эту тему. Там это буквально в пару кликов настраивается.
P.S. Для других почтовых ящиков с поддержкой pop3/imap/smtp и двухфакторной аутентификации аналогично генерируется отдельный пароль.
Цитата: Aleksey от 17.03.2023, 01:28приветствую Adler,
Спасибо, нашёл, действительно отправляет, нужно просто подсовывать в программу C#, не оригинальный свой пароль, а тот который для сторонних приложений.
Задать пароль можно, в своей учётке: упарвление аккаунтом google, потом в безопасность и там защитить аккаунт.
приветствую Adler,
Спасибо, нашёл, действительно отправляет, нужно просто подсовывать в программу C#, не оригинальный свой пароль, а тот который для сторонних приложений.
Задать пароль можно, в своей учётке: упарвление аккаунтом google, потом в безопасность и там защитить аккаунт.
Цитата: Aleksey от 22.03.2023, 15:23Всем привет,
Подскажите пожалуйста, как сделать так, что бы при Drag and Drop файлы прикреплялись к письму на отправку по протоколу gmail?
В код, я добавил прикрепление файловmessage.Attachments.Add(new Attachment(@"C:\Users\Desktop\40.jpg"));т.е. если укажешь путь к файлу, то отправляет один файл, тот который укажешь, я хочу сделать как в видео , что бы работало с помощью Drag and Drop.
Погуглив, нашёл две похожие статьи 1 и 2 , но разобраться сам не могу, прошу помощи.
Можно ли это сделать без добавленияMicrosoft Outlook. Object Library?
Такую форму сделал [spoiler title="код программы"]using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Text; using System.IO; using System.Linq; using System.Net; using System.Net.Mail; using System.Runtime.InteropServices; using System.Windows.Forms; namespace TestProject { public partial class Form1 : Form { public Form1() { InitializeComponent(); // событие на нажатие клавиши Enter KeyPreview = true; KeyDown += (a, e) => { if (e.KeyValue == (char)Keys.Enter) { button1_Click(button1, null); } }; // установили свой шрифт, заранее добавили его в ресурсы PrivateFontCollection myfont = new PrivateFontCollection(); using (MemoryStream fontStream = new MemoryStream(Properties.Resources.MyFont)) { var data = Marshal.AllocCoTaskMem((int)fontStream.Length); byte[] fontdata = new byte[fontStream.Length]; fontStream.Read(fontdata, 0, (int)fontStream.Length); Marshal.Copy(fontdata, 0, data, (int)fontStream.Length); myfont.AddMemoryFont(data, (int)fontStream.Length); Marshal.FreeCoTaskMem(data); } Font = new Font(myfont.Families[0], 12); Controls.OfType<Control>().Where(x => x.GetType().GetProperty("UseCompatibleTextRendering") != null) .ToList().ForEach(x => x.GetType().GetProperty("UseCompatibleTextRendering").SetValue(x, true)); } void button1_Click(object sender, EventArgs e) { string fromUser = richTextBox1.Text; string uemail = textBox1.Text; string upassword = textBox2.Text; try { MailAddress from = new MailAddress(uemail); MailAddress to = new MailAddress("почта на которую отправлять письма@gmail.com"); MailMessage message = new MailMessage(from, to) { Subject = "Твое приложение оценили!", IsBodyHtml = false, Body = $"{Environment.NewLine}{fromUser}" }; SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587) { Credentials = new NetworkCredential(uemail, upassword), EnableSsl = true }; // прикрепляем файл, который хотим отправить message.Attachments.Add(new Attachment(@"C:\Users\virus\Desktop\40.jpg")); 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); } } void textBox1_Click(object sender, EventArgs e) { textBox1.Text = ""; } void textBox2_Click(object sender, EventArgs e) { textBox2.Text = ""; } // делаем Drag and Drop void panel1_DragEnter(object sender, DragEventArgs e) { if(e.Data.GetDataPresent(DataFormats.FileDrop)) { label1.Text = "Отпустите мышь"; e.Effect = DragDropEffects.Copy; } } void panel1_DragLeave(object sender, EventArgs e) { label1.Text = "Перетащите файлы сюда"; } void panel1_DragDrop(object sender, DragEventArgs e) { label1.Text = ""; List<string> paths = new List<string>(); foreach (string obj in (string[])e.Data.GetData(DataFormats.FileDrop)) if (Directory.Exists(obj)) paths.AddRange(Directory.GetFiles(obj, "*.*", SearchOption.AllDirectories)); else paths.Add(obj); label2.Text = string.Join("\r\n", paths); } } }
[/spoiler]
Всем привет,
Подскажите пожалуйста, как сделать так, что бы при Drag and Drop файлы прикреплялись к письму на отправку по протоколу gmail?
В код, я добавил прикрепление файлов Скопированоmessage.Attachments.Add(new Attachment(@"C:\Users\Desktop\40.jpg" style="color: #25d39d !important"));т.е. если укажешь путь к файлу, то отправляет один файл, тот который укажешь, я хочу сделать как в видео , что бы работало с помощью Drag and Drop.
Погуглив, нашёл две похожие статьи 1 и 2 , но разобраться сам не могу, прошу помощи.
Можно ли это сделать без добавления СкопированоMicrosoft Outlook. Object Library?
Такую форму сделал
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Text;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace TestProject
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// событие на нажатие клавиши Enter
KeyPreview = true;
KeyDown += (a, e) => { if (e.KeyValue == (char)Keys.Enter) { button1_Click(button1, null); } };
// установили свой шрифт, заранее добавили его в ресурсы
PrivateFontCollection myfont = new PrivateFontCollection();
using (MemoryStream fontStream = new MemoryStream(Properties.Resources.MyFont))
{
var data = Marshal.AllocCoTaskMem((int)fontStream.Length);
byte[] fontdata = new byte[fontStream.Length];
fontStream.Read(fontdata, 0, (int)fontStream.Length);
Marshal.Copy(fontdata, 0, data, (int)fontStream.Length);
myfont.AddMemoryFont(data, (int)fontStream.Length);
Marshal.FreeCoTaskMem(data);
}
Font = new Font(myfont.Families[0], 12);
Controls.OfType<Control>().Where(x => x.GetType().GetProperty("UseCompatibleTextRendering") != null)
.ToList().ForEach(x => x.GetType().GetProperty("UseCompatibleTextRendering").SetValue(x, true));
}
void button1_Click(object sender, EventArgs e)
{
string fromUser = richTextBox1.Text;
string uemail = textBox1.Text;
string upassword = textBox2.Text;
try
{
MailAddress from = new MailAddress(uemail);
MailAddress to = new MailAddress("почта на которую отправлять письма@gmail.com");
MailMessage message = new MailMessage(from, to)
{
Subject = "Твое приложение оценили!",
IsBodyHtml = false,
Body = $"{Environment.NewLine}{fromUser}"
};
SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587)
{
Credentials = new NetworkCredential(uemail, upassword),
EnableSsl = true
};
// прикрепляем файл, который хотим отправить
message.Attachments.Add(new Attachment(@"C:\Users\virus\Desktop\40.jpg" style="color: #25d39d !important"));
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);
}
}
void textBox1_Click(object sender, EventArgs e)
{
textBox1.Text = "";
}
void textBox2_Click(object sender, EventArgs e)
{
textBox2.Text = "";
}
// делаем Drag and Drop
void panel1_DragEnter(object sender, DragEventArgs e)
{
if(e.Data.GetDataPresent(DataFormats.FileDrop))
{
label1.Text = "Отпустите мышь";
e.Effect = DragDropEffects.Copy;
}
}
void panel1_DragLeave(object sender, EventArgs e)
{
label1.Text = "Перетащите файлы сюда";
}
void panel1_DragDrop(object sender, DragEventArgs e)
{
label1.Text = "";
List<string> paths = new List<string>();
foreach (string obj in (string[])e.Data.GetData(DataFormats.FileDrop))
if (Directory.Exists(obj))
paths.AddRange(Directory.GetFiles(obj, "*.*", SearchOption.AllDirectories));
else
paths.Add(obj);
label2.Text = string.Join("\r\n", paths);
}
}
}
Цитата: Aleksey от 23.03.2023, 19:01Всем привет
Ребят, как в письмо добавить несколько вложений? (например 2-3-5 файлов)[spoiler title="вот мой код:"]
foreach (string item in label2.Text.Split('\n')) { message.Attachments.Add(new Attachment(item)); }
[/spoiler]
на сайте увидел такой код:Message.Attachments.Add(new System.Net.Mail.Attachment(strAttPath));делаю так же, но не работает много вложение. Подскажите пожалуйста, как исправить?
Всем привет
Ребят, как в письмо добавить несколько вложений? (например 2-3-5 файлов)
foreach (string item in label2.Text.Split('\n'))
{
message.Attachments.Add(new Attachment(item));
}
на сайте увидел такой код:
Message.Attachments.Add(new System.Net.Mail.Attachment(strAttPath));
делаю так же, но не работает много вложение.
Подскажите пожалуйста, как исправить?
Цитата: Aleksey от 03.04.2023, 14:35Всем привет 🙌
Подскажите пожалуйста, как указать имя файла и расширение файла так: @"C:\Users\virus\Desktop\Fail.exe" , чтоб когда качало любой файл по ссылке, скачивало самого себя (т.е. если файл *.exe то чтоб качало *.exe а если файл *.mp4 то чтоб сохраняло файл с своим именем .mp4), как это написать в коде?
[spoiler title="вот код"]using (WebClient wc = new WebClient()) { wc.DownloadProgressChanged += (s, a) => { progressBar1.Value = a.ProgressPercentage; }; wc.DownloadFileAsync(new Uri($"{textBox1.Text}"), @"C:\Users\virus\Desktop\Fail.exe"); }
[/spoiler]
Спасибо
Всем привет 🙌
Подскажите пожалуйста, как указать имя файла и расширение файла так: @"C:\Users\virus\Desktop\Fail.exe" , чтоб когда качало любой файл по ссылке, скачивало самого себя (т.е. если файл *.exe то чтоб качало *.exe а если файл *.mp4 то чтоб сохраняло файл с своим именем .mp4), как это написать в коде?
using (WebClient wc = new WebClient())
{
wc.DownloadProgressChanged += (s, a) =>
{
progressBar1.Value = a.ProgressPercentage;
};
wc.DownloadFileAsync(new Uri($"{textBox1.Text}"), @"C:\Users\virus\Desktop\Fail.exe");
}
Спасибо
Цитата: sigus от 03.04.2023, 15:59Цитата: Aleksey от 11.03.2023, 21:39понял
, спасибо
, поменял.
И всё же, как можно убрать это окно?
т.е. если я правильно понял, то в ключеshutdown -s -f -tнельзя избавится от этого окна?Ну и чтобы избавиться от уведомления можно сделать внутренний таймер, который в последний момент будет вызывать выключение и уведомление просто не успеет появиться.
можешь намекнуть, что за "внутренний таймер"?
какая версия Windows?
Цитата: Aleksey от 11.03.2023, 21:39понял
, спасибо
, поменял.
И всё же, как можно убрать это окно?
т.е. если я правильно понял, то в ключеСкопированоshutdown -s -f -tнельзя избавится от этого окна?Ну и чтобы избавиться от уведомления можно сделать внутренний таймер, который в последний момент будет вызывать выключение и уведомление просто не успеет появиться.
можешь намекнуть, что за "внутренний таймер"?
какая версия Windows?
Цитата: Aleksey от 03.04.2023, 16:11Цитата: sigus от 03.04.2023, 15:59Цитата: Aleksey от 11.03.2023, 21:39понял
, спасибо
, поменял.
И всё же, как можно убрать это окно?
т.е. если я правильно понял, то в ключеshutdown -s -f -tнельзя избавится от этого окна?Ну и чтобы избавиться от уведомления можно сделать внутренний таймер, который в последний момент будет вызывать выключение и уведомление просто не успеет появиться.
можешь намекнуть, что за "внутренний таймер"?
какая версия Windows?
Windows 10 Pro x64 (1803 build 17134)
Цитата: sigus от 03.04.2023, 15:59Цитата: Aleksey от 11.03.2023, 21:39понял
, спасибо
, поменял.
И всё же, как можно убрать это окно?
т.е. если я правильно понял, то в ключеСкопированоshutdown -s -f -tнельзя избавится от этого окна?Ну и чтобы избавиться от уведомления можно сделать внутренний таймер, который в последний момент будет вызывать выключение и уведомление просто не успеет появиться.
можешь намекнуть, что за "внутренний таймер"?
какая версия Windows?
Windows 10 Pro x64 (1803 build 17134)
Цитата: sigus от 03.04.2023, 16:26Цитата: Aleksey от 03.04.2023, 16:11Цитата: sigus от 03.04.2023, 15:59Цитата: Aleksey от 11.03.2023, 21:39понял
, спасибо
, поменял.
И всё же, как можно убрать это окно?
т.е. если я правильно понял, то в ключеshutdown -s -f -tнельзя избавится от этого окна?Ну и чтобы избавиться от уведомления можно сделать внутренний таймер, который в последний момент будет вызывать выключение и уведомление просто не успеет появиться.
можешь намекнуть, что за "внутренний таймер"?
какая версия Windows?
Windows 10 Pro x64 (1803 build 17134)
нужно навсегда убрать это окно?
Цитата: Aleksey от 03.04.2023, 16:11Цитата: sigus от 03.04.2023, 15:59Цитата: Aleksey от 11.03.2023, 21:39понял
, спасибо
, поменял.
И всё же, как можно убрать это окно?
т.е. если я правильно понял, то в ключеСкопированоshutdown -s -f -tнельзя избавится от этого окна?Ну и чтобы избавиться от уведомления можно сделать внутренний таймер, который в последний момент будет вызывать выключение и уведомление просто не успеет появиться.
можешь намекнуть, что за "внутренний таймер"?
какая версия Windows?
Windows 10 Pro x64 (1803 build 17134)
нужно навсегда убрать это окно?