SMTP SpecifiedPickupDirectory в Azure? - PullRequest
0 голосов
/ 16 октября 2019

Я работаю над сайтом Episerver CMS, который перемещается в Episerver DXC, который является их облачным решением с использованием Azure. На сайте используется конфиг SMTP в web.config. В средах тестирования и разработки мы не хотим случайно отправлять производственные письма. В текущей среде тестирования и разработки мы используем «SpecifiedPickupDirectory» для сохранения писем на диске вместо их отправки. Я искал и пытался найти, как настроить то же самое в Azure. Но я не могу понять, как.

Это возможно, или мы должны сделать это по-другому?

текущая конфигурация:

 <system.net>
  <mailSettings>
    <smtp from="no-reply@domain.com" deliveryMethod="SpecifiedPickupDirectory" >
      <specifiedPickupDirectory pickupDirectoryLocation="C:\inetpub\mailroot\Pickup" />
      <network host="smtp.domain.com" port="25" defaultCredentials="true" />
    </smtp>
  </mailSettings>
</system.net>

С наилучшими пожеланиями

Никлас

1 Ответ

2 голосов
/ 16 октября 2019

Не зависит от Episerver, но если вы хотите, чтобы они хранились на диске для службы приложений Azure, вы можете установить для pickupDirectoryLocation что-то вроде D:\home\site\wwwroot\App_Data\smtp.

Config не поддерживает относительные к приложению пути, но если вы предпочитаете, вы можете установить путь программно, как показано здесь: Как сохранить электронное письмо вместо отправки при использовании SmtpClient?

TL; Пример кода DR:

var client = new SmtpClient();    

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;
 }

 // TODO Send e-mail using client
...