Wysyłanie e-mail za pomocą c#

0

Witam Serdecznie,
napisałem aplikacje, która umożliwia z poziomu aplikacji wysłać e-mail. Do poprawnego wysłania e-maila z aplikacji trzeba podać swój login i hasło. Jest niestety problem ponieważ google wysyła na e-mail nadawcy, że blokuje próbę logowania ponieważ aplikacja jest mniej bezpieczna jeśli w ustawieniach nadawcy zezwole na logowanie do mniej bezpiecznych aplikacji to wszystko działa. Czy da się coś zrobić z tą autoryzacja aplikacji ?

Dziękuje i Pozdrawiam

using System;
using System.Windows.Forms;
using System.Net.Mail;

namespace ProjectX
{
    public partial class UserContact : UserControl
    {
        private int port;
        private string nickSmtp;
        private string myemail = "[email protected]";

        public UserContact()
        {
            InitializeComponent();
        }

        private void bunifuThinButton21_Click(object sender, EventArgs e)
        {try
            {
                SmtpClient client = new SmtpClient(nickSmtp, port); 
                MailMessage message = new MailMessage(); 
                message.From = new MailAddress(myemail); 
                message.To.Add(myemail); 
                message.Body = txtbody.Text; 
                message.Subject = txtsubject.Text; 
                client.UseDefaultCredentials = false;

                client.EnableSsl = true;

                client.Credentials = new System.Net.NetworkCredential(txtsender.Text, bunifuMaterialTextbox1.Text);
                Cursor.Current = Cursors.WaitCursor;
                client.Send(message); 
                MessageBox.Show("Wiadomość Wysłana");
                Cursor.Current = Cursors.Default;
                message = null; 

            }catch(Exception Ex)
            {
                MessageBox.Show(Ex.ToString());
            }
        }
 private void bunifuDropdown1_onItemSelected_1(object sender, EventArgs e)
        {

            if (comboBunifu.selectedIndex == 0)
            {

                nickSmtp = "smtp.gmail.com";
                port = 587;

            }
}

title

Jeśli nie działa zdjęcie link do wyjątu który wystąpił: http://ifotos.pl/zobacz/abcpng_qxqarha.png

0

dodaj client.DeliveryMethod = SmtpDeliveryMethod.Network; i zobacz czy pomoże

0

Dodałem client.DeliveryMethod = SmtpDeliveryMethod.Network; niestety to nie pomogło występuje ten sam błąd. Przeczytalem tez od Bartosza link i wnioskuje, ze niestety musze ten wyjątek obsłużyć w ten sposób ze użytkownik dostanie link do strony gdzie możne zmienić ustawienia konta gmail chyba, ze jest jeszcze inna metoda którą można wywołać aby poprawić te bezpieczeństwo ? Dziękuję wam za pomoc

0

Jeszcze postanowilem logowac sie z innej poczty niz gmail lecz aplikacja sie zwiesza i zero odpowiedzi ;P nie rozumiem juz tego wgl... wybieram tak jak daje producent porty i wszystko i nie dziala ;/

  if (comboBunifu.selectedIndex == 1)
            {
                nickSmtp = "smtp.wp.pl";
                port = 465;
                Console.WriteLine("wp.pl");

            }
            if (comboBunifu.selectedIndex == 2)
            {
                Console.WriteLine("wybrales indeks 3");
            }
            if (comboBunifu.selectedIndex == 3)
            {
                nickSmtp = "poczta.o2.pl";
                port = 465;
                Console.WriteLine("o2.pl");
1

link masz tutaj przykład jak wysłać e-mail

0

W jednym ze swoich programików użyłem coś takiego, przy czym nie korzystam z konta na gmail ale w domenie, którą mam wykupioną:

private void SendEmail()
{
    //test wysyłania email przez SMTP z wykorzystaniem SSL
    MailMessage mail = new MailMessage();
    SmtpClient client = new SmtpClient();

    client.UseDefaultCredentials = false;
    client.Port = 587;
    client.Host = Properties.Settings.Default.emailServer;

    client.Credentials = new System.Net.NetworkCredential(Properties.Settings.Default.userName, Properties.Settings.Default.userPassword);
    client.EnableSsl = true;
    client.Timeout = 5000;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    mail.From = new MailAddress(Properties.Settings.Default.userName, "XXX");

    if (string.IsNullOrWhiteSpace(cbMessageReceipient.Text)!= true)
    {
        mail.To.Add(cbMessageReceipient.Text);
    } else
    {
        mail.To.Add("[email protected]");
    }

    mail.Subject = cbMessageTitle.Text + " [Wiadomość z XXX]";
    mail.Body = "Data wystąpienia zdarzenia: " + DateTime.Now.ToString();
    mail.Body += "\n\n" + txtMessageBody.Text;
    mail.Body += "\n--\n" + Properties.Settings.Default.emailFooterText;
    mail.Body += "\n" + Application.ProductName + " " + String.Format("{0}", AssemblyVersion);

    try
    {
        client.Send(mail);
        MessageBox.Show("Wiadomość wysłano!", "Informacja", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    catch (SmtpException ex)
    {
        MessageBox.Show("Błąd: 0x" + ex.HResult.ToString("X") + "\n\n" + ex.Message, "Błąd programu", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    }
}
2

Właściciel konta na Gmailu musi w ustawieniach konta włączyć obsługę „mniej bezpiecznych” aplikacji.
Według Google'a obsługa SMTP jest „mniej bezpieczna” i domyślnie jest wyłączona.

Nie ma na to obejścia innego niż poinstruowanie użytkownika.

0

Tak jak kolega wyze piszej. Pisalem apki w C# i Javie z emailami i zawsze trzeba wejsc na
https://myaccount.google.com/lesssecureapps
I zaznaczyc ze sie zgadzamy.

Dziala na 100% (na dzisiaj) taki dostep:
smtp.gmail.com
587
ssl: true

P

0

Dziękuje, dziękuje Panowie. Tak rozumiem to mam ogarnięte,ale np. chce wyslac z innej poczty -> nickSmtp = "smtp.wp.pl";
port = 465; i niestety jest blad czy zly port wybieram do tego kodu, ktory wyzej napisalem ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0