none
Enviando um email RRS feed

  • Pergunta

  • Boa noite pessoal. Vê se podem me ajudar.

    Criei um programa que povoa um datagrid e a partir desse momento o programa lê registro por registro e dispara um email para o cliente. O cliente que tiver um email cadastrado será disparado um email para ele. Procurei na internet uma classe para enviar email. Encontrei uma classe legal, porém, quando eu tento enviar dá um erro.

    Vou passa o código da classe especificando a linha que está dando o erro.

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net.Mail;
    using System.Net.Mime;
    using System.Net;
    using System.Text.RegularExpressions;
    using System.Net.Configuration;
    using System.Configuration;
    using System.Web.Configuration;
    using System.Web;
    using Imobiliaria;
    using ImobiliariaBLL;
    using ImobiliariaDAL;
    using ImobiliariaEstruturas;
    using System.Xml.Linq;
    using System.Xml;
    //using System.Security.Cryptography.Xml;
    using System.Security.Cryptography.X509Certificates;
    using System.Web.Services.Protocols;
    using System.Net;
    using System.Runtime.InteropServices;
    using System.Drawing.Drawing2D;
    
    namespace ImobiliariaBLL
    {
        public class EnviaEmail
        {
                    /// <summary>
            /// Transmite uma mensagem de email sem anexos
            /// </summary>
            /// <param name="Destinatario">Destinatario (Recipient)</param>
            /// <param name="Remetente">Remetente (Sender)</param>
            /// <param name="Assunto">Assunto da mensagem (Subject)</param>
            /// <param name="enviaMensagem">Corpo da mensagem(Body)</param>
            /// <returns>Status da mensagem</returns>
            /// 
            public static string EnviaMensagemEmail(string Destinatario, string Remetente, string Assunto, string enviaMensagem, string cSMTP, string cSenhaUsuario,
                                                    string cNumeroPorta)
            {
                try
                {
                    // valida o email
                    bool bValidaEmail = ValidaEnderecoEmail(Destinatario);
    
                    // Se o email não é validao retorna uma mensagem
                    if (bValidaEmail == false)
                        return "Email do destinatário inválido: " + Destinatario;
    
                    // cria uma mensagem
                    MailMessage mensagemEmail = new MailMessage(Remetente, Destinatario, Assunto, enviaMensagem);
    
                    //----------------------------------------------------------------------------------------------------------------------------------
                    //obtem os valores smtp do arquivo de configuração . Não vou usar estes valores estou apenas mostrando como obtê-los
                    //Configuration configurationFile = WebConfigurationManager.OpenWebConfiguration(null);
                    //MailSettingsSectionGroup mailSettings = configurationFile.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup;
                    //if (mailSettings != null)
                    //{
                    //    string host = mailSettings.Smtp.Network.Host;
                    //    string password = mailSettings.Smtp.Network.Password;
                    //    string username = mailSettings.Smtp.Network.UserName;
                    //    int port = mailSettings.Smtp.Network.Port;
                    //}
                    //---------------------------------------------------------------------------------------------------------------------------------------
    
                    SmtpClient client = new SmtpClient(cSMTP, Convert.ToInt32(cNumeroPorta));
                    client.EnableSsl = true;
                    NetworkCredential cred = new NetworkCredential(Remetente, cSenhaUsuario);
                    client.Credentials = cred;
    
                    // inclui as credenciais
                    //client.UseDefaultCredentials = true;
    
                    // envia a mensagem
                    client.Send(mensagemEmail);
    
                    return "Mensagem enviada para  " + Destinatario + " às " + DateTime.Now.ToString() + ".";
                }
                catch (Exception ex)
                {
                    return ex.Message;
                }
            }
            /// <summary>
            /// Transmite uma mensagem de email com um anexo
            /// </summary>
            /// <param name="Destinatario">Destinatario (Recipient)</param>
            /// <param name="Remetente">Remetente (Sender)</param>
            /// <param name="Assunto">Assunto da mensagem (Subject)</param>
            /// <param name="enviaMensagem">Corpo da mensagem(Body)</param>
            /// <param name="anexos">Um array de strings apontando para a localização de cada anexo</param>
            /// <returns>Status da mensagem</returns>
            public static string EnviaMensagemComAnexos(string Destinatario, string Remetente, string Assunto, string enviaMensagem, string cSMTP, string cSenhaUsuario,
                                                    string cNumeroPorta, List<string> anexos)
            {
                try
                {
                    // valida o email
                    bool bValidaEmail = ValidaEnderecoEmail(Destinatario);
    
                    if (bValidaEmail == false)
                        return "Email do destinatário inválido:" + Destinatario;
    
                    // Cria uma mensagem
                    MailMessage mensagemEmail = new MailMessage(
                       Remetente,
                       Destinatario,
                       Assunto,
                       enviaMensagem);
    
                    // The anexos arraylist should point to a file location where
                    // the attachment resides - add the anexos to the message
    
                    if (anexos != null)
                    {
                        Attachment anexado = null;
                        foreach (string anexo in anexos)
                        {
                            anexado = new Attachment(anexo, MediaTypeNames.Application.Octet);
                            mensagemEmail.Attachments.Add(anexado);
                        }
                    }
                    SmtpClient client = new SmtpClient("smtp.gmail.com", 465); // (cSMTP, Convert.ToInt32(cNumeroPorta));
                    client.EnableSsl = true;
                    NetworkCredential cred = new NetworkCredential("garibaldoguerreiro1963@gmail.com", "guecha1963"); //Remetente, cSenhaUsuario);
                    client.Credentials = cred;
    
                    // envia a mensagem
                    client.Send(mensagemEmail);// Nessa linha está dando o erro
    
                    return "Mensagem enviada para " + Destinatario + " às " + DateTime.Now.ToString() + ".";
                }
                catch (Exception ex)
                {
                    string erro = ex.InnerException.ToString();
                    return ex.Message.ToString() + erro;
                }
            }
            /// <summary>
            /// Confirma a validade de um email
            /// </summary>
            /// <param name="enderecoEmail">Email a ser validado</param>
            /// <returns>Retorna True se o email for valido</returns>
            public static bool ValidaEnderecoEmail(string enderecoEmail)
            {
                try
                {
                    //define a expressão regulara para validar o email
                    string textoValidar = enderecoEmail;
                    Regex expressaoRegex = new Regex(@"\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}");
    
                    // testa o email com a expressão
                    if (expressaoRegex.IsMatch(textoValidar))
                    {
                        // o email é valido
                        return true;
                    }
                    else
                    {
                        // o email é inválido
                        return false;
                    }
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }
    }
    

    segunda-feira, 30 de setembro de 2019 00:15

Todas as Respostas

  • esse erro é referente a algum objeto que nao foi instanciado e esta null e você está tentando ler!
    o ideal é debugar ou pegue o log completo da exception que deve constar a linha que gerou o erro.
    • Sugerido como Resposta IgorFKModerator quarta-feira, 2 de outubro de 2019 14:25
    terça-feira, 1 de outubro de 2019 18:03
  • Boa noite

    Como eu faço para pegar o log completo da exception?

    Garibaldo

    sexta-feira, 4 de outubro de 2019 00:54
  • Altere a linha abaixo:
                catch (Exception)
                {
                    throw;
                }
    Para
                catch (Exception ex)
                {
                    throw;
                }
    Essa variavel ex vai conter todas informações do erro.
    Se vc colocar um break point antes do throw no debug conseguirá ver as informações da ex ou você pode armazernar em uma outra variavel para gravar em algum log de banco ou mostrar na tela.
    sexta-feira, 4 de outubro de 2019 11:13