簡體   English   中英

如何在類方法調用中傳遞電子郵件地址參數?

[英]How to pass email address parameter in class method call?

在嘗試將電子郵件地址作為參數傳遞給類方法時,出現錯誤。 錯誤是:無法將字符串轉換為system.net mail.mailaddress。 有人可以解釋我的問題嗎?

方法調用

var fromAddress = "email1@noname.com";
var toAddress = "email2@noname.com;email3@noname.com";
SendEmail _sendEmail = new SendEmail();
_sendEmail.SendMail(fromAddress, toAddress);

類方法

public class SendEmail
    {
        public void SendMail(MailAddress fromAddress, MailAddress toAddress)
        {
            try
            {
                MailMessage mail = new MailMessage();
                SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");

                mail.From = new MailAddress(fromAddress);
                mail.To.Add("toAddress");
                mail.Subject = "Test Mail - 1";

                mail.IsBodyHtml = true;
                string htmlBody;

                htmlBody = "Write some HTML code here";

                mail.Body = htmlBody;

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

                SmtpServer.Send(mail);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
    }

只需執行以下操作:

var fromAddress =  new MailAddress("email1@noname.com");
var toAddress = new MailAddress("email2@noname.com");

SendEmail _sendEmail = new SendEmail();
_sendEmail.SendMail(fromAddress, toAddress);

或將方法參數類型從MailAddress更改為string

public void SendMail(string fromAddress, string toAddress)
{
}

請不要同時做兩個! 然后,您將再次面臨類似的問題。

此外,在您的SendMail()方法中,更改mail.To.Add("toAddress"); 行到mail.To.Add(toAddress); 如果toAddress傳遞MailAddress類型或mail.To.Add(new MailAddress(toAddress)); 如果作為字符串類型傳遞。

如果您的toAddress包含多個用逗號分隔的地址,請使用方法參數作為字符串,而不要使用mail.To.Add(toAddress); 行做如下:

foreach(string emailTo in toAddress.Split(';'))
{
    mail.To.Add(new MailAddress(emailTo));
} 

錯誤很明顯。 SendMail方法需要兩個MailAddress,並且您傳遞兩個字符串。 此外,在SendMail中,您可以像對待字符串一樣處理這兩個參數。 因此,只需更改SendMail方法的簽名即可接收兩個字符串

public class SendEmail
{
    public void SendMail(string fromAddress, string toAddress)
    {
        try
        {
            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");

            mail.From = new MailAddress(fromAddress);
            // Note also the error on this line. 
            // You should put each single address in the To field, 
            // not all together
            foreach(string s in toAddress.Split(';'))
               mail.To.Add(s);
            mail.Subject = "Test Mail - 1";

            mail.IsBodyHtml = true;
            string htmlBody;

            htmlBody = "Write some HTML code here";

            mail.Body = htmlBody;

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

            SmtpServer.Send(mail);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
    }
}

最后,請注意,您不能在mail.To.Add方法上放置多個地址。 您需要一個接一個地放置它們,因此需要循環將輸入字符串拆分成單個郵件地址以進行添加

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM