私のサーバーに2つのパブリックIPがあると仮定して、最初のIPを使用してSMTPプロトコル経由で電子メールを送信し、異なる公開IPを使用してSMTP経由で電子メールを送信
local_host
オプションを指定するTCPSocketオプションを認識していますが、SMTPと同様のものは見つかりません。既に構築済みのソケットを受け入れるコンストラクタのオプションは見つかりません。
私のサーバーに2つのパブリックIPがあると仮定して、最初のIPを使用してSMTPプロトコル経由で電子メールを送信し、異なる公開IPを使用してSMTP経由で電子メールを送信
local_host
オプションを指定するTCPSocketオプションを認識していますが、SMTPと同様のものは見つかりません。既に構築済みのソケットを受け入れるコンストラクタのオプションは見つかりません。
あなたは、クラスは新しいソケットを作成し、プライベートtcp_socket
方法を持っているRubyの標準ライブラリではNet :: SMTPクラスのソースコードに見ることができます:
def tcp_socket(address, port)
TCPSocket.open address, port
end
あなたはNet::SMTP
とオーバーライドをサブクラス化でき他の何かを返す方法、またはあなたが何か素早く汚れている必要がある場合は、それを猿のパッチで貼り付けてください。
@socket
instance_variableを直接(instance_variable_set
を使用して)設定することは、ではなく、になります。名前にもかかわらず、このインスタンス変数にはプレーンなSocketインスタンスは含まれていません。クラスNet::InternetMessageIO
のラッパーオブジェクトを保持します。OpenSSL::SSL::Socket
オブジェクトをラップしている可能性があります。TCPSocket
オブジェクトをラップします。
答えをありがとう。私はまた、以下を見つけました:https://ruby-doc.org/stdlib-2.3.3/libdoc/net/smtp/rdoc/Net/SMTP.html#class-Net::SMTP-label-HELO+domainこれはでしょうか?トリックをする?実際に指定されたIPアドレスを使用するのではなく、あなたが実際に指定したIPアドレスを使用するのではなく、HELOドメインからIPアドレスを実際に設定できるように見えますが、リンクしたソースに基づいています。 –
ええ、ドメインは概念的な「このメッセージはどこから来たのですか? 「どのネットワークインターフェイスでこれらのパケットを送信すべきか」などのトランスポートレイヤの質問とは何の関係もありません。それは確かにそれを試してみることができます。 – philomory
ありがとう、おそらく最高のオプションはサブクラス化です –