Ошибка Persits.MailSender.4 «800a0007» при вызове objMail.AddEmbeddedImage - PullRequest
1 голос
/ 11 декабря 2011

Я использую Persits AspEmail для отправки электронных писем в приложении Classic ASP. Я использовал его много раз, но никогда не сталкивался со следующей проблемой:

Мне нужно встроить изображение в тело письма, но на самом деле это изображение является виртуальным (я использую IIS Rewrite для обработки всех перезаписей URL, поэтому, когда изображение запрашивается из определенного каталога, IIS Rewrite вызывает .asp страница, которая отображает изображение с использованием компонента Persits AspJpeg), но когда я пытаюсь это сделать, AspEmail возвращает эту ошибку:

Persits.MailSender.4 error '800a0007'
The system cannot find the path specified.

Внедряется любое другое изображение, которое не является виртуальным.

Код прост:

Set objMail = Server.CreateObject("Persits.MailSender")
...
objMail.AddEmbeddedImage virtualImageUrl, virtualImageCid
...
objMail.Send

Я что-то здесь не так делаю? Если AspEmail не может обрабатывать виртуальные файлы, есть ли способ обойти это? Пожалуйста, кроме использования FSO для временного копирования файла в каталог для его встраивания или оставления изображения на сервере - мне действительно нужно его встроить.

Заранее спасибо (большое!),

Приветствия

Mark

P.S .: Мой сервер работает под управлением IIS 7.5 / IIS Rewrite Module 2 / AspEmail v5.1.0.3.

Ответы [ 2 ]

2 голосов
/ 11 декабря 2011

Свойство AddEmbeddedImage нуждается в физическом пути.И это не делает http-запрос (для получения динамического ответа скрипта).

4.2 Метод AddEmbeddedImage (http://www.aspemail.com/manual_04.html#4_2)
AspEmail поддерживает встроенные изображения с помощью метода AddEmbeddedImage, который принимает два аргумента: the physical path to an image file и его Content ID, который является просто произвольной строкой без пробелов.Если ваше сообщение содержит несколько встроенных изображений, каждому из них должен быть присвоен уникальный идентификатор контента.

Но есть другое свойство, более подходящее, чем AddEmbeddedImage, для использования динамических изображений.Вам нужно сделать запрос http и передать ответ в ваш экземпляр AspEmail, используя свойство AddEmbeddedImageMem .

Аналогичное решение: вставлять Google qrcode в электронную почту

0 голосов
/ 12 декабря 2011

Вот что я сделал:

Поскольку я также использую Persits AspJpeg для создания виртуального изображения, я использовал свойство objAspJpeg.Binary, чтобы временно сохранить изображение в переменной,а затем передал эту переменную в метод objMail.AddEmbeddedImageMem и вуаля.

'First: AspJpeg to process and generate the virtual binary image.'

Set objAspJpeg = Server.CreateObject("Persits.Jpeg")
objAspJpeg.Open(Server.MapPath(physicalImgUrl))   'Actual, physical image.'

'...some image processing: resizing, etc...'

processedVirtualImg = objAspJpeg.Binary   'Generated virtual image.'
Set objAspJpeg      = Nothing

'Second: AspEmail to embed the virtual image and send the email.'

Set objMail    = Server.CreateObject("Persits.MailSender")
objMail.Host   = "www.example.com"
'< the rest of the config parameters here >'

objMail.Body   = "<img src=""cid:virtualImgId"" />"
objMail.IsHTML = True

objMail.AddEmbeddedImageMem "image.jpg", "virtualImgId", processedVirtualImg

objMail.Queue  = True
objMail.Send

Set objMail    = Nothing
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...