2017-04-07 3 views
0

私のサーバーに2つのパブリックIPがあると仮定して、最初のIPを使用してSMTPプロトコル経由で電子メールを送信し、異なる公開IPを使用してSMTP経由で電子メールを送信

local_hostオプションを指定するTCPSocketオプションを認識していますが、SMTPと同様のものは見つかりません。既に構築済みのソケットを受け入れるコンストラクタのオプションは見つかりません。

答えて

1

あなたは、クラスは新しいソケットを作成し、プライベート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オブジェクトをラップします。

+0

答えをありがとう。私はまた、以下を見つけました: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アドレスを実際に設定できるように見えますが、リンクしたソースに基づいています。 –

+0

ええ、ドメインは概念的な「このメッセージはどこから来たのですか? 「どのネットワークインターフェイスでこれらのパケットを送信すべきか」などのトランスポートレイヤの質問とは何の関係もありません。それは確かにそれを試してみることができます。 – philomory

+0

ありがとう、おそらく最高のオプションはサブクラス化です –

関連する問題