title: E-mails not being delivered
body: <p>I am using the System.Net.Mail library to send e-mails through a remote desktop connection. The e-mails are sent correctly if the address is my company's, but for all other addresses, e-mails are not sent. I do not get any exception or error, they just never reach the address, or go to Spam/Junk.
  When i synchronize my 'Sent' folder, the e-mail appears.</p>
  
  <p>The code i am using to send e-mails is below </p>
  
  <pre><code>    var smtpClient = new System.Net.Mail.SmtpClient(hostName)
      {
          EnableSsl = false,
          DeliveryMethod = SmtpDeliveryMethod.Network
      };
      smtpClient.Credentials = new NetworkCredential(userName, password);
      smtpClient.SendAndSaveMessageToIMAP(mailMessage, hostName, port, userName, password, "INBOX.Sent");
  </code></pre>
  
  <p>and the following</p>
  
  <pre><code>        static System.IO.StreamWriter sw = null;
          static System.Net.Sockets.TcpClient tcpc = null;
          static System.Net.Security.SslStream ssl = null;
          static string path;
          static int bytes = -1;
          static byte[] buffer;
          static System.Text.StringBuilder sb = new System.Text.StringBuilder();
          static byte[] dummy;
          private static readonly bool IsRunningInDotNetFourPointFive = SendMethod.GetParameters().Length == 3;
  
          private static readonly System.Reflection.BindingFlags Flags = System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic;
          private static readonly System.Type MailWriter = typeof(System.Net.Mail.SmtpClient).Assembly.GetType("System.Net.Mail.MailWriter");
          private static readonly System.Reflection.ConstructorInfo MailWriterConstructor = MailWriter.GetConstructor(Flags, null, new[] { typeof(System.IO.Stream) }, null);
          private static readonly System.Reflection.MethodInfo CloseMethod = MailWriter.GetMethod("Close", Flags);
          private static readonly System.Reflection.MethodInfo SendMethod = typeof(System.Net.Mail.MailMessage).GetMethod("Send", Flags);
  
          public static void SendAndSaveMessageToIMAP(this System.Net.Mail.SmtpClient self, System.Net.Mail.MailMessage mailMessage, string imapServer, int imapPort, string userName, string password, string sentFolderName)
          {
              try
              {
                  path = System.Environment.CurrentDirectory + "\\emailresponse.txt";
  
                  if (System.IO.File.Exists(path))
                      System.IO.File.Delete(path);
  
                  sw = new System.IO.StreamWriter(System.IO.File.Create(path));
  
                  tcpc = new System.Net.Sockets.TcpClient(imapServer, imapPort);
  
                  ssl = new System.Net.Security.SslStream(tcpc.GetStream());
  
                  try
                  {
                      ssl.AuthenticateAsClient(imapServer);
                  }
                  catch (Exception ex)
                  {
                      throw;
                  }
  
                  SendCommandAndReceiveResponse("");
  
                  SendCommandAndReceiveResponse(string.Format("$ LOGIN {1} {2}  {0}", System.Environment.NewLine, userName, password));
  
                  using (var m = mailMessage.RawMessage())
                  {
                      m.Position = 0;
                      var sr = new System.IO.StreamReader(m);
                      var myStr = sr.ReadToEnd();
                      SendCommandAndReceiveResponse(string.Format("$ APPEND {1} (\\Seen) {{{2}}}{0}", System.Environment.NewLine, sentFolderName, myStr.Length));
                      SendCommandAndReceiveResponse(string.Format("{1}{0}", System.Environment.NewLine, myStr));
                  }
                  SendCommandAndReceiveResponse(string.Format("$ LOGOUT{0}", System.Environment.NewLine));
              }
              catch (System.Exception ex)
              {
                  System.Diagnostics.Debug.WriteLine("error: " + ex.Message);
              }
              finally
              {
                  if (sw != null)
                  {
                      sw.Close();
                      sw.Dispose();
                  }
                  if (ssl != null)
                  {
                      ssl.Close();
                      ssl.Dispose();
                  }
                  if (tcpc != null)
                  {
                      tcpc.Close();
                  }
              }
              self.Send(mailMessage);
          }
  
          private static void SendCommandAndReceiveResponse(string command)
          {
              try
              {
                  if (command != "")
                  {
                      if (tcpc.Connected)
                      {
                          dummy = System.Text.Encoding.ASCII.GetBytes(command);
                          ssl.Write(dummy, 0, dummy.Length);
                      }
                      else
                      {
                          throw new System.ApplicationException("TCP CONNECTION DISCONNECTED");
                      }
                  }
                  ssl.Flush();
  
                  buffer = new byte[2048];
                  bytes = ssl.Read(buffer, 0, 2048);
                  sb.Append(System.Text.Encoding.ASCII.GetString(buffer));
  
                  sw.WriteLine(sb.ToString());
                  sb = new System.Text.StringBuilder();
              }
              catch (System.Exception ex)
              {
                  throw new System.ApplicationException(ex.Message);
              }
          }
  
          public static System.IO.MemoryStream RawMessage(this System.Net.Mail.MailMessage self)
          {
              var result = new System.IO.MemoryStream();
              var mailWriter = MailWriterConstructor.Invoke(new object[] { result });
              SendMethod.Invoke(self, Flags, null, IsRunningInDotNetFourPointFive ? new[] { mailWriter, true, true } : new[] { mailWriter, true }, null);
              result = new System.IO.MemoryStream(result.ToArray());
              CloseMethod.Invoke(mailWriter, Flags, null, new object[] { }, null);
              return result;
          }
  </code></pre>
  
  <p>Any help would be highly appreciated. </p>