C#SMTP的工作原理

问题描述

我正在分析具有邮件发送功能的C#项目。由于某些限制,我无法运行该项目。在分析代码时,我得到的查询很少

MailAddress toMailAddress = new MailAddress(strToMail);
MailAddress fromMailAddress = new fromMailAddress(strFromMail);
SmtpClient smtpClient = new SmtpClient(smtpServer);
String strBody = strMessage;
MailMessage msg = New MailMessage();
msg.From = fromMailAddress

msg.To.Add(toMailAddress);
msg.Subject = strSubject;
smtpClient.Send(msg);
  1. 此处发件人地址来自数据库,但数据库中没有存储相应电子邮件的凭据,也没有通过代码传递的凭据。这是否意味着我可以从任何没有其凭据的帐户发送电子邮件
  2. 发送邮件是否需要Outlook?如果是这样,则将Outlook配置为与代码中的“发件人”地址不同的帐户,是否会抛出任何错误

解决方法

  1. 取决于SMTP服务器的配置方式。在您发布的代码中,它似乎是通过默认端口SMTP(可能在25465587上)发送的,没有凭据。也可以在配置文件(web.config,app.config)中对其进行配置。

  2. 否,您的应用程序在.net下运行,并且Outlook不会对其产生影响。

,
  1. 这取决于SMTP配置,也许是因为您尚未配置,所以您遇到了错误。您面临的确切错误是什么?这是我在代码中用于发送邮件的代码段,可以通过以下代码段提供连接和凭据,希望对您有所帮助!

  2. 根据我的了解,Outlook电子邮件不应影响或引起任何错误。

SqlConnection sqlConnection = new SqlConnection();  
    
sqlConnection.ConnectionString = "server = YOURSERVERNAME; database = YOURDBNAME; User ID = sa; Password = YOURPASSWORD"; //Connection Details  
    
//select fields to mail required details  
    SqlCommand sqlCommand = new SqlCommand("select Name,DOB,Email,Mob from Student",sqlConnection); //select query command  
    SqlDataAdapter sqlDataAdapter = new System.Data.SqlClient.SqlDataAdapter();  
    sqlDataAdapter.SelectCommand = sqlCommand;

try
         {
                MailMessage mail = new MailMessage();
                SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");    //This is for creating a gmail client

                mail.From = new MailAddress("your_email_address@gmail.com");
                mail.To.Add("to_address");
                mail.Subject = "Test Mail";
                mail.Body = "Test SMTP mail from GMAIL";

                SmtpServer.Port = 587;
                SmtpServer.Credentials = new System.Net.NetworkCredential("username","password");
                SmtpServer.EnableSsl = true;

                SmtpServer.Send(mail);
                MessageBox.Show("mail Send");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }