Merge pull request #1949 from lewurm/fixtype
[mono.git] / mcs / class / System / System.Net.Mail / SmtpClient.cs
index 4188a96c3219b620c513237872baf041d2755ea0..4b3f468b091e0a91445b6e5ee363c2df51e07c87 100644 (file)
@@ -55,15 +55,12 @@ using System.Net.Configuration;
 using System.Configuration;
 using System.Net.Security;
 using System.Security.Authentication;
-#if NET_4_5
 using System.Threading.Tasks;
-#endif
 
 namespace System.Net.Mail {
+       [Obsolete ("SmtpClient and its network of types are poorly designed, we strongly recommend you use https://github.com/jstedfast/MailKit and https://github.com/jstedfast/MimeKit instead")]
        public class SmtpClient
-#if NET_4_0
        : IDisposable
-#endif
        {
                #region Fields
 
@@ -125,9 +122,7 @@ namespace System.Net.Mail {
                        if (cfg != null) {
                                this.host = cfg.Network.Host;
                                this.port = cfg.Network.Port;
-#if NET_4_0
                                this.enableSsl = cfg.Network.EnableSsl;
-#endif
                                TargetName = cfg.Network.TargetName;
                                if (this.TargetName == null)
                                        TargetName = "SMTPSVC/" + (host != null ? host : "");
@@ -174,9 +169,7 @@ namespace System.Net.Mail {
                }
 #endif
 
-#if NET_4_0
                public
-#endif
                string TargetName { get; set; }
 
                public ICredentialsByHost Credentials {
@@ -264,7 +257,6 @@ namespace System.Net.Mail {
                #endregion // Events 
 
                #region Methods
-#if NET_4_0
                public void Dispose ()
                {
                        Dispose (true);
@@ -275,7 +267,6 @@ namespace System.Net.Mail {
                {
                        // TODO: We should close all the connections and abort any async operations here
                }
-#endif
                private void CheckState ()
                {
                        if (messageInProcess != null)
@@ -591,10 +582,13 @@ namespace System.Net.Mail {
                        
                        // FIXME: parse the list of extensions so we don't bother wasting
                        // our time trying commands if they aren't supported.
-                       status = SendCommand ("EHLO " + Dns.GetHostName ());
+                       
+                       // Get the FQDN of the local machine
+                       string fqdn = Dns.GetHostEntry (Dns.GetHostName ()).HostName;
+                       status = SendCommand ("EHLO " + fqdn);
                        
                        if (IsError (status)) {
-                               status = SendCommand ("HELO " + Dns.GetHostName ());
+                               status = SendCommand ("HELO " + fqdn);
                                
                                if (IsError (status))
                                        throw new SmtpException (status.StatusCode, status.Description);
@@ -611,10 +605,10 @@ namespace System.Net.Mail {
                                ResetExtensions();
                                writer = new StreamWriter (stream);
                                reader = new StreamReader (stream);
-                               status = SendCommand ("EHLO " + Dns.GetHostName ());
+                               status = SendCommand ("EHLO " + fqdn);
                        
                                if (IsError (status)) {
-                                       status = SendCommand ("HELO " + Dns.GetHostName ());
+                                       status = SendCommand ("HELO " + fqdn);
                                
                                        if (IsError (status))
                                                throw new SmtpException (status.StatusCode, status.Description);
@@ -661,16 +655,8 @@ namespace System.Net.Mail {
                                        sfre.Add (new SmtpFailedRecipientException (status.StatusCode, message.Bcc [i].Address));
                        }
 
-#if TARGET_JVM // List<T>.ToArray () is not supported
-                       if (sfre.Count > 0) {
-                               SmtpFailedRecipientException[] xs = new SmtpFailedRecipientException[sfre.Count];
-                               sfre.CopyTo (xs);
-                               throw new SmtpFailedRecipientsException ("failed recipients", xs);
-                       }
-#else
                        if (sfre.Count >0)
                                throw new SmtpFailedRecipientsException ("failed recipients", sfre.ToArray ());
-#endif
 
                        // DATA
                        status = SendCommand ("DATA");
@@ -714,13 +700,8 @@ namespace System.Net.Mail {
                        if (message.ReplyToList.Count > 0)
                                SendHeader ("Reply-To", EncodeAddresses (message.ReplyToList));
 
-#if NET_4_0
                        foreach (string s in message.Headers.AllKeys)
                                SendHeader (s, ContentType.EncodeSubjectRFC2047 (message.Headers [s], message.HeadersEncoding));
-#else
-                       foreach (string s in message.Headers.AllKeys)
-                               SendHeader (s, message.Headers [s]);
-#endif
        
                        AddPriorityHeader (message);
 
@@ -748,7 +729,6 @@ namespace System.Net.Mail {
                        Send (new MailMessage (from, to, subject, body));
                }
 
-#if NET_4_5
                public Task SendMailAsync (MailMessage message)
                {
                        var tcs = new TaskCompletionSource<object> ();
@@ -766,7 +746,7 @@ namespace System.Net.Mail {
 
                static void SendMailAsyncCompletedHandler (TaskCompletionSource<object> source, AsyncCompletedEventArgs e, SendCompletedEventHandler handler, SmtpClient client)
                {
-                       if ((object) handler != e.UserState)
+                       if (source != e.UserState)
                                return;
 
                        client.SendCompleted -= handler;
@@ -783,7 +763,6 @@ namespace System.Net.Mail {
 
                        source.SetResult (null);
                }
-#endif
 
                private void SendDot()
                {
@@ -978,11 +957,7 @@ try {
                                case TransferEncoding.Base64:
                                        byte [] content = new byte [av.ContentStream.Length];
                                        av.ContentStream.Read (content, 0, content.Length);
-#if TARGET_JVM
-                                       SendData (Convert.ToBase64String (content));
-#else
                                            SendData (Convert.ToBase64String (content, Base64FormattingOptions.InsertLineBreaks));
-#endif
                                        break;
                                case TransferEncoding.QuotedPrintable:
                                        byte [] bytes = new byte [av.ContentStream.Length];
@@ -1022,11 +997,7 @@ try {
                                case TransferEncoding.Base64:
                                        byte [] content = new byte [lr.ContentStream.Length];
                                        lr.ContentStream.Read (content, 0, content.Length);
-#if TARGET_JVM
-                                       SendData (Convert.ToBase64String (content));
-#else
                                            SendData (Convert.ToBase64String (content, Base64FormattingOptions.InsertLineBreaks));
-#endif
                                        break;
                                case TransferEncoding.QuotedPrintable:
                                        byte [] bytes = new byte [lr.ContentStream.Length];
@@ -1058,11 +1029,7 @@ try {
                                att.ContentStream.Read (content, 0, content.Length);
                                switch (att.TransferEncoding) {
                                case TransferEncoding.Base64:
-#if TARGET_JVM
-                                       SendData (Convert.ToBase64String (content));
-#else
                                        SendData (Convert.ToBase64String (content, Base64FormattingOptions.InsertLineBreaks));
-#endif
                                        break;
                                case TransferEncoding.QuotedPrintable:
                                        SendData (ToQuotedPrintable (content));
@@ -1198,9 +1165,7 @@ try {
                                throw new SmtpException (SmtpStatusCode.GeneralFailure, "Server does not support secure connections.");
                        }
 
-#if TARGET_JVM
-                       ((NetworkStream) stream).ChangeToSSLSocket ();
-#elif SECURITY_DEP
+#if   SECURITY_DEP
                        SslStream sslStream = new SslStream (stream, false, callback, null);
                        CheckCancellation ();
                        sslStream.AuthenticateAsClient (Host, this.ClientCertificates, SslProtocols.Default, false);