Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在通过SmtpClient发送电子邮件时使用http代理_C#_Proxy_Smtpclient - Fatal编程技术网

C# 如何在通过SmtpClient发送电子邮件时使用http代理

C# 如何在通过SmtpClient发送电子邮件时使用http代理,c#,proxy,smtpclient,C#,Proxy,Smtpclient,我能够发送电子邮件通过以下方式与雅虎电子邮件。但我的问题是,我能不能让电脑在连接雅虎服务器时使用代理?我的意思是使用代理连接来连接yahoo smpt服务器。这可能吗?多谢各位 public static bool func_SendEmail(string srFrom, string srSenderEmail, string srSenderEmailPw, string srHtmlBody, string srTextBody, string srTitle, str

我能够发送电子邮件通过以下方式与雅虎电子邮件。但我的问题是,我能不能让电脑在连接雅虎服务器时使用代理?我的意思是使用代理连接来连接yahoo smpt服务器。这可能吗?多谢各位

public static bool func_SendEmail(string srFrom, string srSenderEmail, string srSenderEmailPw, 
        string srHtmlBody, string srTextBody, string srTitle, string srProxy)
{
    try
    {
        using (MailMessage message = new MailMessage(new MailAddress(srSenderEmail, srFrom), new MailAddress(srSenderEmail)))
        {
            message.ReplyTo = new MailAddress(srSenderEmail, srFrom);
            message.IsBodyHtml = false;
            message.Subject = srTitle;
            message.SubjectEncoding = System.Text.Encoding.UTF8;
            AlternateView textPart = AlternateView.CreateAlternateViewFromString(srTextBody, Encoding.UTF8, "text/plain");
            textPart.TransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable;
            message.AlternateViews.Add(textPart);
            AlternateView htmlPart = AlternateView.CreateAlternateViewFromString(srHtmlBody, Encoding.UTF8, "text/html");
            htmlPart.TransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable;
            message.AlternateViews.Add(htmlPart);
            message.BodyEncoding = Encoding.UTF8;
            using (SmtpClient oSmtp = new SmtpClient())
            {
                oSmtp.Host = "smtp.mail.yahoo.com";
                oSmtp.Credentials = new NetworkCredential(srSenderEmail, srSenderEmailPw);
                oSmtp.EnableSsl = false;
                oSmtp.Port = 587;
                oSmtp.Send(message);
            }
        }
    }
    catch
    {
        return false;
    }
    return true;
}
好吧,这个问题和这个不一样:

这个问题专门询问如何使用代理

另一方面,我的问题是如何使用http代理连接另一个邮件服务器来发送电子邮件

在本例中,我希望使用线程、每个线程的代理,并通过使用http代理将每个线程连接到yahoo smtp服务器以发送电子邮件

多谢各位

public static bool func_SendEmail(string srFrom, string srSenderEmail, string srSenderEmailPw, 
        string srHtmlBody, string srTextBody, string srTitle, string srProxy)
{
    try
    {
        using (MailMessage message = new MailMessage(new MailAddress(srSenderEmail, srFrom), new MailAddress(srSenderEmail)))
        {
            message.ReplyTo = new MailAddress(srSenderEmail, srFrom);
            message.IsBodyHtml = false;
            message.Subject = srTitle;
            message.SubjectEncoding = System.Text.Encoding.UTF8;
            AlternateView textPart = AlternateView.CreateAlternateViewFromString(srTextBody, Encoding.UTF8, "text/plain");
            textPart.TransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable;
            message.AlternateViews.Add(textPart);
            AlternateView htmlPart = AlternateView.CreateAlternateViewFromString(srHtmlBody, Encoding.UTF8, "text/html");
            htmlPart.TransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable;
            message.AlternateViews.Add(htmlPart);
            message.BodyEncoding = Encoding.UTF8;
            using (SmtpClient oSmtp = new SmtpClient())
            {
                oSmtp.Host = "smtp.mail.yahoo.com";
                oSmtp.Credentials = new NetworkCredential(srSenderEmail, srSenderEmailPw);
                oSmtp.EnableSsl = false;
                oSmtp.Port = 587;
                oSmtp.Send(message);
            }
        }
    }
    catch
    {
        return false;
    }
    return true;
}
System.Net.GlobalProxySelection.Select = new WebProxy(address,port);

更新:
System.Net.GlobalProxySelection.Select
已被弃用 如果您使用它,您将收到警告:

此类已被弃用。请使用WebRequest.DefaultWebProxy 而是访问和设置全局默认代理。请改用“null” GetEmptyWebProxy的

改用这个:

WebRequest.DefaultWebProxy = new WebProxy(address,port);

@劳埃德:没有。我希望软件在连接雅虎smtp服务器时使用代理。代理是什么意思?web代理将用于隐藏IP地址或帮助缓存结果,但SMTP不是这样工作的。如果你想通过另一个邮件服务器转发邮件,那么你不能将代码指向中继服务器并让中继转发所有邮件到Yahoo吗?@Lukos我是说http代理。我想使用http代理将电子邮件发送到yahoo smtp。可能是您正在寻找的答案,您将如何在多线程应用程序中使用它?好的,这在我的情况下不起作用,因为我需要使用多线程。这在.NET 4.5中被弃用,取而代之的是
WebRequest。代理
@BenCollins您能回答我的问题吗。那个尖锐的问题根本没有回答我的问题all@MonsterMMORPG我想你的问题已经回答了。顶部链接的问题与您提出的问题相同。“如何使用代理”和“如何使用http代理连接到另一个邮件服务器发送电子邮件”之间没有区别。添加线程也不会改变答案。为每个线程实例化一个新的
SmtpClient
对象,或者使用一个
static
实例。