Рейтинг:
12
Kornfeld Eliyahu Peter
SQL имеет системную хранимую процедуру, называемую процедура sp_send_dbmail[^]. Одним из параметров является @вложенный файл...
Цитата:
[ @вложенный файл= ] 'file_attachments'
Это разделенный точкой с запятой список имен файлов, которые нужно прикрепить к сообщению электронной почты. Файлы в списке должны быть указаны как абсолютные пути. Список вложений имеет тип nvarchar (max). По умолчанию Почта базы данных ограничивает количество вложений файлов 1 Мб на файл.
Abhi1 Kanobi
Спасибо, но я использую отдельную хранимую процедуру , а не ту, что дает sql server .
Как это можно сделать в моем случае?
Спасибо
Kornfeld Eliyahu Peter
Какой ИП вы используете?
Abhi1 Kanobi
Я создал отдельный SP для того же самого .
Изменить процедуру [dbo].[sp_send_mail]
@from varchar(500) ,
@to varchar(500) ,
@subject varchar(500),
@body varchar(4000) ,
@bodytype varchar (10),
@output_mesg varchar (10) вывод,
@output_desc varchar (1000) вывод
АС
Объявить @оказывает инт
Объявить @hr int
Объявить @source varchar(255)
DECLARE @description varchar(500)
EXEC @hr = sp_oacreate 'cdo. message', @imsg out
EXEC @hr = sp_oasetproperty @imsg,
- конфигурация.поля("http://schemas.microsoft.com/cdo/configuration/sendusing"). значение', '2'
-От SMTP сервера
EXEC @hr = sp_oasetproperty @imsg,
- конфигурация.поля("http://schemas.microsoft.com/cdo/configuration/smtpserver"). ценность',
'------'
--Имя пользователя SMTP
EXEC @hr = sp_oasetproperty @imsg,
- конфигурация.поля("http://schemas.microsoft.com/cdo/configuration/sendusername"). ценность',
'----'
-- Пароль Gmail
EXEC @hr = sp_oasetproperty @imsg,
- конфигурация.поля("http://schemas.microsoft.com/cdo/configuration/sendpassword"). ценность',
'----'
EXEC @hr = sp_oasetproperty @imsg,
- конфигурация.поля("http://schemas.microsoft.com/cdo/configuration/smtpusessl"). ценность',
'---'
EXEC @hr = sp_oasetproperty @imsg,
- конфигурация.поля("http://schemas.microsoft.com/cdo/configuration/smtpserverport"). ценность',
'465'
EXEC @hr = sp_oasetproperty @imsg,
- конфигурация.поля("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"). ценность',
"1"
EXEC @hr = sp_oamethod @imsg, ' конфигурация.поля.обновление', нуль
Метод exec @ч = sp_oasetproperty @оказывает, 'в', @к
Метод exec @ч = sp_oasetproperty @оказывает, 'С', @от
Метод exec @ч = sp_oasetproperty @оказывает, 'тема', @темы
EXEC @hr = sp_oasetproperty @imsg, @bodytype, @body
Метод exec @ч = процедуру sp_oamethod @оказывает, 'отправить', нуль
SET @output_mesg = 'успех'
Если @hr <> 0
Выберите @hr
НАЧАТЬ
Метод exec @ч = процедура sp_oageterrorinfo значение null, @источник, @Описание из
Если @hr = 0
НАЧАТЬ
set @output_desc = @описание
КОНЕЦ
ЕЩЁ
НАЧАТЬ
Набор @output_desc = 'вызов sp_oageterrorinfo искусству'
КОНЕЦ
Если нет, то @output_desc равен NULL
Ошибкой @output_mesg=''
КОНЕЦ
EXEC @hr = sp_oadestroy @imsg
Kornfeld Eliyahu Peter
И есть какая-то конкретная причина, по которой вы написали это чудовище?
В любом случае-нет никаких признаков того, что вы устанавливаете свойство "вложения" в любом месте... так что же у вас есть, кроме?
Abhi1 Kanobi
Я выложил этого монстра просто для ясности .. :)
Я пытался реализовать его таким образом, но безуспешно .
SET @IMAGEFILE = 'test.jpg'
SET @IMAGEPATH = 'C:\Users\----\Desktop\test.jpg'
-- Объявить курсор для циклического перебора табличных данных
Объявить курсор EmailCursor для
Выберите ID, адрес электронной почты,имя из демо-почты
-- Открыть курсор для выборки данных в переменной электронной почты
откройте EmailCursor
Принести следующий из EmailCursor в @ИД@электронной почты@имя
while (@@FETCH_STATUS = 0)
Начать
Объявить @out_desc varchar(1000),
@out_mesg varchar (10)
Объявить @body varchar (max) =
--'< a href="http://newsletter.qendidate.com/?id= ' + CAST(@ID As varchar(20))+" '& gt; пожалуйста, нажмите здесь, чтобы заполнить недостающие данные';
--'< a href="someurl.com/?id=1" > пожалуйста, нажмите здесь, чтобы заполнить недостающие данные';
'< img src= "cid:' +@IMAGEFILE+' ""width=" 235 "height=" 70 "border=" 0 "alt= " no image"> & lt;a href= " someurl. aspx/? id=' + CAST(@ID As varchar(20))+" 'Пожалуйста, нажмите здесь, чтобы заполнить недостающие данные';
Kornfeld Eliyahu Peter
Поскольку вы создаете объект CDO.Message, было бы разумно прочитать документацию и установить соответствующие свойства для вложений, а не заново изобретать wheal (который в вашем случае больше похож на квадрат)...
(Подсказка - ваш файл находится на серверах C:, но у получателя нет файла на его C:, но все равно src из img будет указывать на C:)
Abhi1 Kanobi
может ли путь к изображению быть каким-то url-адресом, и передача того же самого будет работать ?
Kornfeld Eliyahu Peter
Если к вашему изображению можно получить доступ по URL-адресу (я бы рассматривал его как большую дыру в безопасности), то да - это будет работать именно так...
Abhi1 Kanobi
Да, вы правы . путь не должен быть пройден .
Каким должен быть правильный путь?
Kornfeld Eliyahu Peter
По-настоящему правильный способ-использовать сборку SQL в sp_send_dbmail... Однако если вам нужно придерживаться CDO, то прочтите документацию и используйте 'sp_oasetproperty' в свойстве Attachments...
Abhi1 Kanobi
Хорошо , но будет ли он прикреплять файл или вставлять его в тело ,
Мне нужно, чтобы он был встроен в тело
Kornfeld Eliyahu Peter
Прикрепить-также ваше решение не будет встраивать изображение... Для этого вам нужно превратить его в строку base64 и добавить ее в качестве источника изображения...
Abhi1 Kanobi
Ладно, я пытаюсь