sp_send_dbmail و ارسال ایمیل فارسی
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: یک دقیقه


نکته‌ی کوچکی در مورد ارسال ایمیل فارسی توسط رویه ذخیره شده سیستمی sp_send_dbmail اس کیوال سرور وجود دارد که شبیه به insert داده‌های فارسی در دیتابیسی است که پس از ثبت، به صورت ؟؟؟ ذخیره می‌شوند. (این مورد با تنظیم collation تقریبا قابل حل است)
اگر هنگام ثبت، collation عربی یا فارسی (در اس کیوال سرور 2008) انتخاب شود، مشکلی در ثبت نخواهد بود.
اگر به collation اهمیت نمی‌دهید باید اس کیوال سرور را مجبور کرد که داده را یونیکد ذخیره کند و اینکار با اضافه کردن یک N به ابتدای رشته صورت می‌گیرد و همچنین انتخاب نوع داده‌های n دار مانند nvarchar و امثال آن (n در اینجا به معنای national و اجبار آن می‌باشد):

Insert into tblTest(f1,f2) values(1,N'متن فارسی')
دقیقا همین نکته هم درباره‌ی ارسال ایمیل از طریق اس کیوال سرور صادق است. اگر N به ابتدای رشته اضافه نشود، رشته ارسالی را با فرمت ANSI ارسال می‌کند و داده‌های یونیکد متن تخریب خواهند شد؛ مثلا چیزی شبیه به حالت زیر:

<div align="center"><table border="1" width="95%" dir="rtl" cellspacing="0" cellpadding="0" style="font-family: Tahoma; font-size: 8pt" bordercolor="#660066"><tr><td bgcolor="#FFF9FF"><blockquote><p align="justify"><br>????? ????? ?<br>???? ???? ? ????? ?????? ??? ?? ????? ????? ?????. ???? ??? ???? ???? ????? ????? ????? ????? ????? ??? ??? ???? ???? ?????? ? ???? ?? ????? ???? ???? ??? ????? ??????.<br>???? ??? ????? ???? ?? ?????? ???? ????? ?????? ????? ? ?? ???? ???????? ????? ???? ???? ???? ?????? ???? ???? ??? ?? ????? ????.</blockquote></td></tr></table></div>
این مشکل به صورت زیر قابل حل است:

DECLARE @msg NVARCHAR(max)
SET @msg=N'متن فارسی'
برای ردگیری وضعیت ایمیل‌های ارسالی هم می‌توان از کوئری‌های زیر استفاده نمود:

SELECT * from sysmail_allitems
SELECT * from sysmail_faileditems
SELECT * from sysmail_event_log