Подтвердить что ты не робот

Как сохранить адрес электронной почты вместо отправки при использовании SmtpClient?

Я использую SmtpClient для отправки электронной почты с вложением. Однако для определенной партии нам нужно как-то сохранить MailMessage вместо отправки. Затем мы думаем/надеемся вручную загрузить сообщения в папку черновиков пользователей.

Можно ли сохранить эти сообщения с неповрежденным вложением (невозможно, я бы подумал). Или, альтернативно, загружать сообщения в папку в учетной записи пользователя?

Если у кого-то есть опыт, я бы очень признателен за помощь или указатель.

4b9b3361

Ответ 1

При тестировании в ASP.NET мы сохраняем наши письма в папке, а затем отправляем их через почтовый сервер. Возможно, вы могли бы изменить свои настройки web.config, как это для вашей партии?

<system.net>
  <mailSettings>
    <smtp deliveryMethod="SpecifiedPickupDirectory">
      <specifiedPickupDirectory pickupDirectoryLocation="c:\Temp\mail\"/>
    </smtp>
  </mailSettings>
</system.net>

Дополнительная информация:

Ответ 3

Как и информация о других ответах SpecifiedPickupDirectory, если вы хотите, чтобы ваши электронные письма были отправлены в папку по отношению к сайту, это было удобно при тестировании на серверах сборки, где вы не знаете пути - вы можете добавить быструю проверку кода отправки электронной почты:

    SmtpClient client = new SmtpClient();
    ...

    // Add "~" support for pickupdirectories.
    if (client.DeliveryMethod == SmtpDeliveryMethod.SpecifiedPickupDirectory && client.PickupDirectoryLocation.StartsWith("~"))
    {
        string root = AppDomain.CurrentDomain.BaseDirectory;
        string pickupRoot = client.PickupDirectoryLocation.Replace("~/", root);
        pickupRoot = pickupRoot.Replace("/",@"\");
        client.PickupDirectoryLocation = pickupRoot;
    }

И ваши тесты будут выглядеть примерно так (убедитесь, что вы используете App_Data, чтобы IIS мог писать в папку):

    // Arrange - get SitePath from AppDomain.Current.BaseDirectory + ..\
    string pickupPath = Path.Combine(SitePath, "App_Data", "TempSmtp");
    if (!Directory.Exists(pickupPath))
        Directory.CreateDirectory(pickupPath);

    foreach (string file in Directory.GetFiles(pickupPath, "*.eml"))
    {
        File.Delete(file);
    }

    // Act (send some emails)

    // Assert
    Assert.That(Directory.GetFiles(pickupPath, "*.eml").Count(), Is.EqualTo(1));

Ответ 4

Вы можете настроить это с помощью параметра system.net в вашем файле web.config/app.config.

<system.net>
  <mailSettings>
    <smtp deliveryMethod="Network">
      <network host="mail.mydomain.com" port="25" />
    </smtp>
    <!-- Use this setting for development
    <smtp deliveryMethod="SpecifiedPickupDirectory">
      <specifiedPickupDirectory pickupDirectoryLocation="C:\Temp" />
    </smtp>
    -->
  </mailSettings>
</system.net>

Кроме того, здесь ссылка с информацией о переносится с System.Web.Mail на System.Net.Mail.

Ответ 5

Ошибка также требует добавления как обходного пути в некоторых версиях фреймворка. Таким образом, завершенная версия выглядит так:

<system.net>
  <mailSettings>
    <smtp deliveryMethod="SpecifiedPickupDirectory">
        <specifiedPickupDirectory pickupDirectoryLocation="c:\Temp\mail\"/>
        <network host="localhost" />
    </smtp>
  </mailSettings>
</system.net>

Ответ 6

Это сильно зависит от клиента электронной почты и его API автоматизации. SMTP - это протокол отправки и передачи почты. У него нет способности сохранять или даже получать электронную почту.