c # отправка почты из окна не запускается - PullRequest
0 голосов
/ 24 июня 2009

У меня странное поведение в моем приложении WinForm, написанном на c #.

в моем: private void buttonSave_Click(object sender, EventArgs e)

Я вызываю свою функцию: functions.sendStatusEmail();

Странно то, что, когда я нажимаю кнопку Сохранить , отправка электронной почты не запускается.Но если я закрываю свое приложение, почта обрабатывается и отправляется.

Я что-то пропустил или нужно вручную вызвать событие приложения som для запуска отправки.

(я пытался использовать client.SendAsync(mail,null); затем он сработал при нажатии, но письмо было пустым)

Заранее спасибо

- Изменить: примеры кода

private void buttonSave_Click(object sender, EventArgs e)
{
    // checks if a ticket is active
    if (workingTicketId > 0)
    {
        // update ticket information
        functions.updateTicketInfo(workingTicketId, comboBoxPriority.SelectedIndex, 
                                    comboBoxStatus.SelectedIndex, textBoxComment.Text);

        // gives feedback
        labelFeedback.Text = "Updated";

        // updates the active ticket list
        populateActiveTicketList();

        // marks working ticket row in list
        dataGridActiveTicketList.Rows[workingGridIndex].Selected = true;

        // checks for change of ticket status
        if (comboBoxStatus.SelectedIndex != workingTicketStatus)
        {
            // checks if contact person exists
            if (labelContactPersonValue.Text.ToString() != "")
            {
                // sends email to contact person
                functions.sendStatusEmail(labelContactPersonValue.Text, comboBoxStatus.SelectedIndex, workingTicketId, textBoxDescription.Text);
            }

            // updates working ticket status
            workingTicketStatus = comboBoxStatus.SelectedIndex;
        }

    }
} 

и функция отправки электронной почты:

// sends a status email to contact person   
// returns noting
public void sendStatusEmail(string email, int newStatus, int ticketId, string ticketText)
{
    // defines variables
    string emailSubject;
    string emailBody;


    // some exkluded mailcontent handling

    // sends mail
    MailMessage mail = new MailMessage("myFromEmail@hidden.com",email,emailSubject,emailBody);
    SmtpClient client = new SmtpClient(ConfigurationManager.AppSettings["MailSMTP"]);

    mail.IsBodyHtml = true;
    client.Send(mail);

    // dispose
    mail.Dispose();
}

Ответы [ 2 ]

1 голос
/ 24 июня 2009

Кстати, SendAsync не работает, потому что вы вызвали mail.dispose () после вызова Async. Правильный способ сделать это в асинхронном режиме:

private void button1_Click(object sender, EventArgs e)
{
    MailMessage mail = new MailMessage("from@domain.com", "to@domain.com", "subj", "body");
    SmtpClient client = new SmtpClient("SMTPHOST");
    mail.IsBodyHtml = true;
    client.SendCompleted += new
    SendCompletedEventHandler(SendCompletedCallback);

    client.SendAsync(mail,mail);//send the mail object itself as argument to callback

}

private void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
    if (e.Cancelled)
    {
        //Mail sending is cancelled
    }
    if (e.Error != null)
    {
        //There is an error,e.Error will contain the exception
    }
    else
    {
        //Do any other success processing
    }

    ((MailMessage)e.UserState).Dispose();//Dispose
}
1 голос
/ 24 июня 2009

Не могу понять, почему это не будет работать. Я использовал функцию ниже, и она успешно отправляет электронное письмо:

public static bool SendEmail (string smtpServer, string fromAddress, string fromDisplayName,
    string toAddress, string subject, string contents, bool important) {

    MailAddress from = new MailAddress (fromAddress, fromDisplayName);
    MailPriority priority = important ? MailPriority.High : MailPriority.Normal;

    MailMessage m = new MailMessage {
        From = from,
        Subject = subject,
        Body = contents,
        Priority = priority,
        IsBodyHtml = false
    };

    MailAddress to = new MailAddress (toAddress);
    m.To.Add (to);

    SmtpClient c = new SmtpClient (smtpServer) { UseDefaultCredentials = false };

    c.Send (m);
    return true;
}

Без обид, но вы уверены, что приложение закрывается, что приводит к отправке электронной почты. В большинстве случаев происходит задержка между отправкой и получением электронной почты из-за трафика на SMTP-сервере. Попробуйте нажать эту кнопку, затем подождите некоторое время (3-4 минуты) и попробуйте обновить почтовый ящик в течение этого времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...