1

Java と C# の 2 つのアプリケーションを試します。Java アプリケーションは電子メールを正常に送信できますが、C# は送信できません。ここに 2 つのアプリがあります: 1.Java

    final String username = "myaccount@mydomain";
final String password = "mypassword";
String smtpHost = "smtp.mydomain";

Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", smtpHost);
props.put("mail.smtp.port", "465");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password);
    }
});

Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(username));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(username));
message.setSubject("Test send email");
message.setText("Hi you!");
Transport.send(message);

2.C#

    string username = "myaccount@mydomain";
string password = "mypassword";
string smtpHost = "smtp.mydomain";

SmtpClient mailClient = new SmtpClient(smtpHost, 465);
mailClient.Host = smtpHost;
mailClient.Credentials = new NetworkCredential(username, password);
mailClient.EnableSsl = true;
MailMessage message = new MailMessage(username, username, "test send email", "hi u");

mailClient.Send(message);

では、C# アプリケーションで犯した間違いは何ですか? メールを送信できないのはなぜですか?

編集: この質問を読みました.NET Framework を使用して SSL SMTP 経由で電子メールを送信するにはどうすればよいですか? そしてそれは動作します。非推奨の System.Web.Mail.SmtpMail は機能しますが、System.Net.Mail.SmtpClient は機能しません。なんで ?

3.この C# コードは正常に動作します。

    System.Web.Mail.MailMessage myMail = new System.Web.Mail.MailMessage();
myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver","smtp.mydomain");
myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport","465");
myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing","2");
myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "myaccount@mydomain");
myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "mypassword");
myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true");
myMail.From = "myaccount@mydomain";
myMail.To = "myaccount@mydomain";
myMail.Subject = "new code";
myMail.BodyFormat = System.Web.Mail.MailFormat.Html;
myMail.Body = "new body";
System.Web.Mail.SmtpMail.SmtpServer = "smtp.mydomain:465";
System.Web.Mail.SmtpMail.Send(myMail);
4

2 に答える 2

1

.NETSystem.Net.Mail.SmtpClientクラスは、暗黙的な SSL 接続を処理できません。この例ではクライアントが構成されているため、暗黙的な SSL 接続はポート 465 経由で送信されます。

AIM (Aegis Implicit Mail) などのサードパーティ ライブラリを使用して、暗黙的な SSL メッセージを送信できます。

于 2015-04-07T09:04:00.567 に答える