2

私は自分の SMTP サーバーを構築している C# プロジェクトに取り組んでいます。基本的には機能していますが、複数の受信者を送信しようとしていますが、エラーが発生しています。

送信者ドメインから MX レコードを取得し、MX レコードを使用して複数の受信者に電子メールを送信しようとしています。同じドメインで 2 人の受信者を処理すると正常に動作しますが、2 人の受信者が異なるドメインを持っている場合は、次の応答が返されます。

Failed to send email. General Exception: Error in processing. The server response was: 4.3.0 Multiple destination domains per transaction is unsupported.  Please

それ以降は何もなくplease、応答が終了します。

以下は、MX レコードを取得する方法です。

string[] mxRecords = mxLookup.getMXRecords(Classes.CommonTasks.getDomainFromEmail(ドメイン));

public string[] getMXRecords(string domain)
{
    DnsLite dl = new DnsLite(library);

    ArrayList dnsServers = getDnsServers();
    dl.setDnsServers(dnsServers);

    ArrayList results = null;
    string[] retVal = null;
    results = dl.getMXRecords(domain);
    if (results != null)
    {
        retVal = new string[results.Count];


        int counter = 0;
        foreach (MXRecord mx in results)
        {
            retVal[counter] = mx.exchange.ToString();
            counter++;
        }
    }
    return retVal;
}

以下は、私がメールを送信する方法です。

if (mxRecords != null)
                    {
                        MailMessage composedMail = new MailMessage();
                        composedMail.From = new MailAddress(message.EmailFromAddress);
                        //MailAddressCollection test = new MailAddressCollection();
                        //composedMail.To = test;
                        composedMail = addRecipientsToEmail(composedMail, message.emailRecipients);
                        composedMail.Subject = message.subject;
                        composedMail.Body = message.EmailBody;
                        if (message.contentType.ToString().Contains("text/html"))
                        {
                            composedMail.IsBodyHtml = true;
                        }

                        SmtpClient smtp = new SmtpClient(mxRecords[0]);
                        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                        smtp.Port = 25;
                        if (Configuration.emailConfig.useSmtpMaxIdleTime)
                        {
                            smtp.ServicePoint.MaxIdleTime = 1;
                        }
                        library.logging(methodInfo, string.Format("Sending email via MX Record: {0}", mxRecords[0]));
                        smtp.Send(composedMail);
                        updateEmailStatus(message.emailID, EmailStatus.Sent);   
                        library.logging(methodInfo, string.Format("Successfully sent email ID: {0}", message.emailID));
                    }
                    else
                    {
                        string error = string.Format("No MX Record found for domain: {0}", domain);
                        library.logging(methodInfo, error);
                        library.setAlarm(error, CommonTasks.AlarmStatus.Warning, methodInfo);
                    }

これは、Google が実行を制限しているように見えますが、受信者ごとにメールを個別に送信する以外に回避する方法が見つかりません。

用途がある場合、2 つのドメインは Google アプリ ドメインです。

ご協力いただきありがとうございます。

4

2 に答える 2

1

Google を介して単一の受信者にメールを送信できるので、問題は mx レコードの解決にはありません。Mx レコードは IP アドレスを通知しますが、その IP の背後にあるサービスの機能/動作については通知しません。

これまでのところ、mx-record を解決できます。ただし、smtp-client が代わりに mx を解決するので、自分で mx を解決する必要はありません。ホスト名を指定するだけで済みます。ただし、これは DNS についてさらに学ぶための優れた演習であることに注意してください。時間の無駄はありません:-)

私が覚えている限りでは、意図した方法で Google 経由でメールを送信するには、Google アカウントが必要です。そのアカウントの資格情報を使用して smtp-server で認証すると、新しい視点を開くことができます

于 2013-10-22T00:12:38.537 に答える
1

あなたは一人ではないようです。これをチェックしてください。

:

「私の調査と調査に基づいて、何が起こっているのか、システムが配信サーバー (aspmx.l.google.com) に直接接続していると考えています。これは配信サーバーであるため、次のことは許可されていません。

  1. Google でプロビジョニングされていないアカウントへの配信 (つまり、認証されていないリレー)。

  2. 同じ SMTP セッション内の複数の異なるドメインへの配信。

2 つ目は、私たちにとって重要なものです。今月 (2012 年 5 月) の初めに、サーバー設定が調整されました。これは、配信サーバーが複数ドメインの許可されないルールを厳密に適用していることを意味します。これを回避するには 2 つの方法があります。1 つ目は、別々の smtp セッションで別々のドメインに送信することです。2 つ目は、aspmx.l.google.com の代わりに smtp.gmail.com を使用することです。」

http://productforums.google.com/forum/#!topic/apps/jEUrvTd1S_w

于 2013-10-22T00:17:24.113 に答える