۰۷ بهمن ۱۳۸۶

هدرها در Gmail

یکی از مشکلاتی که از زمان آمدن Gmail با آن روبرو بودم این بود که وقتی ایمیلی از طریق تابع mail() به آن فرستاده می‌شد header ها را نمی‌شناخت و آن ها را داخل متن ایمیل مخلوط می‌کرد و خلاصه همه چی بهم می‌ریخت.

یک مدت گذشت تا مدتی پیش مجبور شدم برایش وقت بگذارم و بهش گیر بدم که چرا اینطوری می‌شود تا اینکه فهمیدم Gmail، headerهایی که آخر هر سطر آنها یک \r(نشانه سر سطر) وجود دارد را نمی شناسد. بنابراین برای حل این مشکل باید آخر سطر هر بخش از header فقط \n(نشانه سطر جدید) وجود داشته باشد. البته ظاهرا بقیه میل سرورها با هر دو کار می‌کنند و چه \n استفاده کنید چه \r\n مشکلی پیش نمی آید. اگر اینطور باشد شما می توانید همیشه از \n استفاده کنید یا خط زیر را قبل از استفاده از تابع mail() بگذارید که اگر آدرس گیرنده Gmail بود تمام \r\n ها به \n تبدیل شود:

if (preg_match('/gmail/',$to)) $header = str_replace("\r\n","\n",$header);