実現したいこと
WSL2上のUbuntuで組んでいるメール送信プログラムから
ホストマシンに立てているSMTPサーバーへのメール送信を実現したい。
前提
Javaでメール送信プログラムを組んでいます。
環境は以下の通りです。
メール送信プログラム側の環境
WSL2上のUbuntu
shell
1$ lsb_release -a 2No LSB modules are available. 3Distributor ID: Ubuntu 4Description: Ubuntu 20.04.6 LTS 5Release: 20.04 6Codename: focal 7 8$ ip -br address 9lo UNKNOWN 127.0.0.1/8 ::1/128 10eth0 UP 172.20.113.35/20 fe80::215:5dff:fe73:ac45/64
ホスト側のSMTPサーバー側の環境
smtp4dev
Version: 3.2.0-ci20221023104
発生している問題・エラーメッセージ
org.apache.commons.mail.EmailException: Sending the email to the following server failed : [host_name]:25
host_nameでpingは通っています。
ただ、ポート25を指定した場合のnpingは通りません。
ポートを開いてあげれば行けるのかと思っていますが、どのように行えばいいのか手順がわかりません。
わかる方ご教授をお願い致します。
現状の追記
現状ローカルマシンでsmtp4devを疑い、FackSMTPを使用してC#でローカルでメール送信プログラムを組んでみたところ、送信が行えました。
目的(smtp4devの動作確認として同様のメール送信をFackSMTPを使用して行う)
環境
C#.net (Coreじゃない方)
C#
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6 7namespace ConsoleMailSample 8{ 9 internal class Program 10 { 11 static void Main(string[] args) 12 { 13 var host = "ローカルのホスト名(Windowsのipconfig /allで出てくるホスト名)"; 14 var port = 25; 15 var userName = "sample.user"; 16 var password = "sample.pass"; 17 var fromAddress = "sample.user@hogehoge.com"; 18 var toAddress = "to.user@higehige.com"; 19 20 var msg = new MimeKit.MimeMessage(); 21 msg.From.Add(new MimeKit.MailboxAddress(userName, fromAddress)); 22 msg.To.Add(new MimeKit.MailboxAddress("to.user", toAddress)); 23 24 msg.Subject = "testmail" + DateTime.Now.ToString(); 25 26 var mainMessage = new MimeKit.TextPart("Plain"); 27 mainMessage.Text = "test mail"; 28 msg.Body = mainMessage; 29 30 using (var sc = new MailKit.Net.Smtp.SmtpClient()) 31 { 32 try 33 { 34 Console.WriteLine("送信開始"); 35 sc.Connect(host, port, MailKit.Security.SecureSocketOptions.Auto); 36 sc.Authenticate(userName, password); 37 sc.Send(msg); 38 sc.Disconnect(true); 39 40 } 41 catch (Exception ex) 42 { 43 Console.WriteLine(ex); 44 } 45 finally 46 { 47 Console.WriteLine("送信終了"); 48 } 49 } 50 51 Console.ReadLine(); // 待機 52 53 } 54 } 55} 56
C#側では、FackSMTPでは動いてsmtp4devでは動作しなかったので、toge_さんのメッセージついては読んで、確認をしてみます。
今後は、mailtrapを使用して、外部向けにテストメール送信をC#とJavaで実装してみて実行結果を見ます。
実行結果を見て、外部に問題無く届くのであれば、ローカルとWSL2の間の問題なので、この辺は私全く知識が足りていないので、本か何かご存じであれば、教えて頂ければ幸いです。
目的(Java側から同一の環境(FackSMTP)へ向けてのメール送信テスト)
C#側ではメール送信できたので、ローカルのC#ではなくWSL側のJavaからメール送信テスト。
ここれ問題があるのであれば、ホストマシンとWSLの間がうまくいっていないという認識です。
(私の中では)
java
1// ローカルホスト名でpingが通っているし、ローカルホスト名(Windowsのマシン名)を指定してても大丈夫だと思っています。(ここが違ったら指摘願います) 2 private static String _hostName = "ローカルのホスト名(Windowsのipconfig /allで出てくるホスト名)"; 3 private static int _port = 25; 4 private static String _user = "user.sample"; 5 private static String _pass = "pass.ample"; 6 private static String _fa = "user.sample@hogehoge.com"; 7 private static String _ta = "to.user@hogehoge.com";
java
1 private void sendSimpleMail() throws EmailException{ 2 try 3 { 4 var email = new SimpleEmail(); 5 email.setHostName(this._mti.getHostName()); 6 email.setSmtpPort(this._mti.getSmtpPort()); 7 email.setAuthentication(this._mti.getSmtpUser(), this._mti.getSmtpPass()); 8 email.setSSLOnConnect(false); 9 email.setFrom(this._mti.getFromAddress()); 10 email.setSubject(this._mti.getSubject()); 11 email.setMsg(this._mti.getMainMessage()); 12 email.addTo(this._mti.getToAddressList()); 13 if(!StringUtils.isEmpty(this._mti.getCcAddress())) 14 email.addCc(this._mti.getCcAddress()); 15 if(!StringUtils.isEmpty(this._mti.getBccAddress())) 16 email.addBcc(this._mti.getBccAddress()); 17 email.send(); 18 } 19 catch(EmailException e){ 20 throw e; 21 } 22 }
結果
org.apache.commons.mail.EmailException: Sending the email to the following server failed : [host_name]:25
結果エラーとなりました。
mailtrap側への送信はまだ未テストなのでこの後で追加します。
ご回答者の皆様。
ご回答いただきありがとうございます。
引き続きよろしくお願いいたします。

回答2件
あなたの回答
tips
プレビュー