У меня есть proc, где я генерирую маленький документ HTML со ссылкой и отсылаю его через xp_smtp_sendmail proc. Ссылка сгенерирована на основе результатов запроса и длинна. Это работает в большинстве случаев. Однако иногда связь разорвана из-за пробелов, вставляемых в querystring имена переменной, т.е. &Na me=John.
Это могло бы варьироваться между почтовыми клиентами (те же работы ссылки в Gmail, но не мог бы работать в Comcast из-за пробелов. Пробел, кажется, случайным образом вставлен, таким образом, в каждой поврежденной ссылке на электронное письмо пространство могло бы повредить другие querystring переменные. Когда я действительно ПЕЧАТАЮ от proc, ссылка является чистой, никакие пробелы.
Вот мой образец почты proc выполняемый в основном proc (который получает результаты запроса и генерирует HTML для @Message). Пробел, кажется, вставлен независимо от того, кодирую ли я URL или нет.
Заранее спасибо за помощь. Я могу отправить более чистую версию кода, если он не отображен правильно здесь.
.... результаты запроса выше
SET @Message = NULL
SET @Message = @Message +
+ '<br/>Dear ' + @FirstName + ' ' + @LastName + ','
+ '<br/><br/>Recently you took "' + @Title + '". '
+ 'In response to the question "What is it?" '
+ 'you responded "' + @Response + '".'
+ '<br/><br/>Following up on previous mailing'
+ '<br/><br/>Please click on the link below'
+ '<br/><br/><a href="' + @Link + '">Please click here</a>'
+ '<br/><br/>plain text'
+ '<br/><br/>plain text,'
+ '<br/><br/>plain text<br/>
plain text<br/>
plain text<br/>
plain text<br/>
plain text<br/>
plain text
EXEC @rc = master.dbo.xp_smtp_sendmail
@FROM = 'any@any.com',
@FROM_NAME = 'Any User',
@TO = @Email,
@priority = N'NORMAL',
@subject = N'My email',
@message = @Message,
@messagefile = N'',
@type = N'text/html',
@attachment = N'',
@attachments = N'',
@codepage = 0,
@server = 'smtp.server.any'
Какова длина ссылки со значениями?
Я предполагаю, что происходит некоторая упаковка, и у вас есть разрыв строки, заменяющийся пробелом.
Он выглядит случайным, поскольку значения различаются по длине, поэтому разделение происходит случайным образом.
Еще одна мысль: вам нужны только теги
.
не требуется (с пробелом или без него) и может способствовать
Как насчет включения возврата каретки в код. BR будет возвращать только каретку в HTML, но сам источник не имеет возврата каретки.
1 - Проверьте длину создаваемого сообщения и переключитесь на отправку из файла, если длина приближается к 4000 символов.
2 - Вставлять символы cr / lf перед каждым предложением или абзацем.
3 - Убедитесь, что у вас есть cr / lf до и после открытия тега (или просто lf, если это нравится SMTP-серверу).
4 - Поговорите с кем угодно об сокращении длины этой встроенной ссылки - это просто неприемлемо
5 - Спросите о любых параметрах конфигурации на сервере smtp, позволяющих отправлять электронную почту в полностью закодированном двоичном формате (требуются заголовки MIME и кодировка Base64)
6 - Ищите более свежую альтернативу xp_smtp_sendmail, возможно .NET xp
Ваша проблема в том, что вы относитесь к mai как к веб-странице. Почта была изобретена во времена текстовых консолей и часто имела ограничение на длину строки 72 символа. Вам необходимо заключить HTML-код в строки длиной не более 72 символов, чтобы гарантировать, что он будет правильно доставлен всем получателям.
Для этого используйте кавычки для печати и оберните строки до 72 символов.
Однако я понятия не имею, как это сделать в SQL Server, кроме как написать процедуру для задания. Вы можете последовать советам в FAQ по ASP .
В основном он говорит о сокращении ссылки с помощью уловок или с помощью служб сокращения ссылок.