既存のアカウントを使用せずにプログラムから電子メールを送信するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/29988

  •  09-06-2019
  •  | 
  •  

質問

私のプログラムでエラーレポートを電子メールで送信できるようにしたいと考えています。ユーザー名、パスワード、SMTP サーバーなどをハードコーディングせずにこれを行うにはどうすればよいですか。コードに?(これを行うと、ユーザーがプログラムを逆コンパイルし、この電子メール アカウントを乗っ取ることが可能になります。)

ポート 25 への Telnet 接続でいくつかのことができると言われていますが、詳細については非常に曖昧です。Google のコード スニペットのほとんどは、既存のアカウントがあることを前提としていますが、この状況では機能しません。

私は .NET v3.5 (特に C#) を使用していますが、考え方はほとんどの言語で十分似ていると思います。私がオフライン アプリのためにこれを行っていることを理解し、PHP コードなどを私に提供しない限り、問題はないはずです。

役に立ちましたか?

解決

アカウントが gmail.com にある限り、セットアップしてください gmail-smtp-in.l.google.com プログラム内の送信 SMTP サーバーとして使用します。このサーバーを使用する場合、gmail アカウントに電子メールを送信するためにパスワードを入力する必要はありません。

他のヒント

接続するWebサービスを作成します。この Web サービスは、プログラムが提供するデータに基づいて電子メールを送信する必要があります。すべての機密アクセス データは Web サービス側に保持されるため、より安全です。

プログラムがユーザーに直接電子メールを送信する必要がある場合、何らかの方法でその情報を取得する必要があるため、決意の強い攻撃者はその情報も入手する可能性があります。

単純な http フォームまたは Web サービスをどこかにホストして、アプリケーションから必要な情報をそこに投稿し (認証は必要ありません)、後で手動で見るために保存したり、そのサーバーから電子メールを送信したりできるようにすることを検討したことがありますか?

最善の計画は、管理下で実行されているサービス (単純な場合は Web フォーム) にエラー情報を送信し、そこから電子メールが送信される (または他の適切な方法で記録される) ことだと思います。

電子メールの送信がエンド ユーザーにとって有益であると考えられる場合、別のオプションは、ユーザーに自分の SMTP サーバー (および必要に応じてユーザー名とパスワード) を入力させることです。Unix システムでは、sendmail を使用して、ユーザーは正しく設定する必要があります。私は以前、このアプローチを使用してシステムのスケジュールされたタスクのユーザー レポートを送信するシステムで作業していましたが、それは非常にうまく機能しました。

必要なのは、使用している ISP の SMTP サーバーを知ることです。自分の ISP の SMTP サーバーを使用する場合、メールリレー スパムを行っているとはみなされないため、認証なしで通過できます。

残念ながら、その情報を常に簡単に取得できるわけではありません。あるいは、企業内で Exchange を使用している場合のように匿名でログインできない小さな例外もあります。

最初は情報を暗号化し、実行時に復号化することを考えていましたが、ネットワーク カードを盗聴することで情報を入手できます。ただし、すでに他の人が提案しているように、それを復号化とメール送信を行う(またはWebサービスに直接情報を送信する)どこかのWebサービスと組み合わせることができます。

MailMessage msg = new MailMessage("someone@foo.com", "someoneelse@bar.com");
msg.Subject = "Check it out!";
msg.Body = "Visit stackoverflow.com!";
SmtpClient client = new SmtpClient("some.smtp.server", 25);
client.Send(msg);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top