3

コンピューターがプロキシ経由でインターネットに接続されている場合、またはインターネットに直接接続されている場合にコードが正常に動作するように、SMTP 経由で C# のメールを Gmail、Yahoo、AOL、Msn、Live などのさまざまなメール プロバイダーに送信したいと考えています。(プロキシは、内部ネットワークから要求を受け取り、それらをインターネットに転送するフォワード プロキシであり、私は IE でプロキシを次のように構成します)
................... .........

PCがプロキシ経由で接続されていない場合にSMTPメールを送信できるコードがあります

    public void SendMail(string senderId, string password, List<string> To, List<string> CC, List<string> BCC, string Subject, string Body, List<Attachment> Attachment)
    {
        SmtpClient SmtpServer = null;
        string[] ss = senderId.Split('@');

        string ServerName = ss[1].Substring(0, ss[1].IndexOf("."));

        switch (ServerName.ToLower())
        {
            case "gmail":
                SmtpServer = new SmtpClient("smtp.gmail.com");
                SmtpServer.Port = 587;
                SmtpServer.Credentials = new System.Net.NetworkCredential(senderId, password);
                SmtpServer.EnableSsl = true;
                break;
            case "msn":
            case "live":
            case "hotmail":
            case "outlook":
                SmtpServer = new SmtpClient("smtp.live.com");
                SmtpServer.Port = 25;
                SmtpServer.Credentials = new System.Net.NetworkCredential(senderId, password);
                SmtpServer.EnableSsl = true;
                break;

            case "aol":
                SmtpServer = new SmtpClient("smtp.aol.com");
                SmtpServer.Port = 25;
                SmtpServer.Credentials = new System.Net.NetworkCredential(senderId, password);
                SmtpServer.EnableSsl = true;
                break;
            case "yahoo":
            case "ymail":
            case "rocketmail":
            case "yahoomail":
                SmtpServer = new SmtpClient("smtp.mail.yahoo.com");
                SmtpServer.Port = 25;
                SmtpServer.Credentials = new System.Net.NetworkCredential(senderId, password);
                SmtpServer.EnableSsl = false;
                break;
            default:

                break;


        }
        SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network;

        MailMessage mail = new MailMessage();
        mail.From = new MailAddress(senderId);

        foreach (string item in To)
        {
            mail.To.Add(item);
        }
        foreach (string item in CC)
        {
            mail.CC.Add(item);
        }
        foreach (string item in BCC)
        {
            mail.Bcc.Add(item);
        }

        mail.Subject = Subject;
        mail.Body = Body;

        foreach (Attachment item in Attachment)
        {
            mail.Attachments.Add(item);
        }

        SmtpServer.Send(mail);

    }

これは問題なく動作していますが、プロキシ経由で接続しているときにメールを送信したいと考えています。

Sending Mail over proxy server
ASP.net SMTP Mail without Proxyのような非常に多くの投稿を読みました
PROXY 経由で送信する電子メール用の .NET ライブラリはありますか?
それらはすべて不可能であると述べていますが、検索中に、プロキシを構成することによりユーザーがプロキシ経由でメールを送信できるようにするlimilabsサンプルであるchilkatライブラリを見つけました。
SOCKS プロキシを読み、raw ソケットを使用して SMTP メールを送信する方法を学びましたが、解決策が見つかりません。
同じ問題に直面した人や、私にできることを考えている人がいれば、以前に行われたいくつかの作業のアイデアをいただければ幸いです。

編集:-既に述べたように、Chilkat と limilabsを使用したサンプルを見つけました。これは、それらを使用したくないことを意味し、サードパーティの dllを使用することは許可されていません。

4

1 に答える 1