نقل قول: مشكل Indy با فارسي
ربطی به فارسی نداره؛ string در دلفی 7 یونیکد نیست، پس هر داده ایی رو که بریزید در string در دلفی 7، اگر یونیکد باشه، باطل میشه!
استفاده از Indy 10 یا کامپوننت های TNT هم موقعی مفید هست که شما بدونید دارید چیکار می کنید، و بدونید که چطور باید داده های یونیکد خودتان را در یک محیط غیریونیکد حفظ کنید.
اگر اطلاعی از این مسائل ندارید، و صرفا میخواید برنامه تون با فارسی مشکل نداشته باشه، بهتره برید سراغ دلفی 2010 تا درگیر مسائل مربوط به تبدیل یونیکد به ANSI و بالعکس برای همچین کارهای ساده ایی نشید.
نقل قول: مشكل Indy با فارسي
ممنون. ولي من اصلا نيازي به هيچ واسط يا ذخيره داده براي نگهداري يا حفظ اطلاعات يونيكد در محيط غير يونيكد ندارم. به اين كد نگاه كنيد:
IdMessage.Body.Assign(tntMemoMsg.Lines)
مستقيما از tnt داخل IdMessage ميشه و بعدش هم ارسال ميشه
نقل قول: مشكل Indy با فارسي
نقل قول:
ربطی به فارسی نداره؛ string در دلفی 7 یونیکد نیست، پس هر داده ایی رو که بریزید در string در دلفی 7، اگر یونیکد باشه، باطل میشه!
یه سوال.وقتی داخل یک رشته ای در دلفی 7 مقدار فارسی میریزیم و مثلاً روی فرم نشونش میدیم،چرا باطل نمیشه. یعنی میخوام بدونم آیا اون داده ها هم یونیکد هستند یا نه ؟
نقل قول: مشكل Indy با فارسي
خير يونيكد نيستند. كلا دلفي 7 از يونيكد پشتيباني نميكنه. كاراكترهاي فارسي را كه ميبينيد به واسطه ويندوز شماست كه زبان فارسي را پشتيباني ميكند.
نقل قول: مشكل Indy با فارسي
نقل قول:
مستقيما از tnt داخل IdMessage ميشه و بعدش هم ارسال ميشه
همین دیگه! خصوصیت IdMessage.Body شما در دلفی 7 از چه نوعی هست؟ WideString هست؟ نه، string هست. string هم در دلفی 7 یعنی AnsiString، پس داده یونیکد شما باطل شد!
داده رو به صورت Stream براش بفرستید، یا اینکه، داده را با Base64 کد کنید، و سپس براش بفرستید. البته باید header را هم به درستی تغییر بدید که مشخص باشه شما دارید از Base64 استفاده می کنید.
نقل قول: مشكل Indy با فارسي
نقل قول:
یه سوال.وقتی داخل یک رشته ای در دلفی 7 مقدار فارسی میریزیم و مثلاً روی فرم نشونش میدیم،چرا باطل نمیشه. یعنی میخوام بدونم آیا اون داده ها هم یونیکد هستند یا نه ؟
اونها داده های ANSI هستند که از CodePage فارسی استفاده می کنند. در صورتی هم درست نمایش داده میشند که در سیستم مقصد، کاربر CodePage فعالش را برای نرم افزارهای غیر یونیکد، بر روی همان زبان مورد نظر شما (فارسی) تنظیم کرده باشه، وگرنه کارکترها به شکل صحیح نمایش داده نمیشند.
نقل قول: مشكل Indy با فارسي
نقل قول:
داده رو به صورت Stream براش بفرستید
چطوري؟
ممكنه يك نمونه بگذاريد؟
نقل قول: مشكل Indy با فارسي
نقل قول: مشكل Indy با فارسي
ممنون.
كدي كه در آن تاپيك گذاشته بوديد امتحان كردم. مشكلم حل شد.
البته در ابتدا ايميل ارسالي خالي ميرفت. با حذف بخش message partي كه با MailText درست كرده بوديد و انتصاب مستقيم IdMessage1.Body.Text := EncodedText مشكل حل شد
نقل قول: مشكل Indy با فارسي
سلام آقاي نعمتي
ميشه شما كه كارتون راه افتاد يك sample براي ارسال ايميل بگذارين. من همين مشكل را دارم ولي نتونستم ايميل را بفرستم. البته ميفرسته ولي محتوا مانند زير ميشه:
{\rtf1\fbidis\ansi\ansicpg1256\deff0\deflang1065{\ fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}} \viewkind4\uc1\pard\ltrpar\f0\fs16 TntRichEdit1\par \par }
آقاي كشاورز
يه جاي ديگه نوشته بودين كه با دلفي 2009 و ... كار كنيم. ولي اين براي من ممكن نيست چون يه برنامه عريض و طويل دارم كه با دلفي 7 نوشته شده و همه اون به راحتي قابل انتقال به 2009 نيست. الان هم كارفرما گفته كه ميخواد امكان ارسال ايميل را هم بهش اضافه بكنه.
لطفا اگه ميتونين راهنمايي كنين
نقل قول: مشكل Indy با فارسي
نقل قول:
البته ميفرسته ولي محتوا مانند زير ميشه:
خب، شما دارید متن RTF ارسال میکنید، نه Plain Text. احتمالا متن رو در RichEdit نوشتید، و دارید از RichEdit به صورت Stream می خونید. این کدهایی هم که می بینید، تگ های فرمت RTF هستند.
نقل قول:
يه جاي ديگه نوشته بودين كه با دلفي 2009 و ... كار كنيم. ولي اين براي من ممكن نيست چون يه برنامه عريض و طويل دارم كه با دلفي 7 نوشته شده و همه اون به راحتي قابل انتقال به 2009 نيست.
آقای نعمتی هم کدشان را از دلفی 7 به نسخه های بالاتر انتقال ندادند، بلکه با همان دلفی 7 مشکل شان حل شد.
نقل قول: مشكل Indy با فارسي
خيلي ممنون آقاي كشاورز :لبخندساده:
درست شد ولي هنوز عنوان )subject) را فارسي نميفرسته، يعني دقيقا همان متن كد شدهاي را كه براي متن پيام ميگذارم و درست نمايش ميده براي عنوان ايميل درست نمايش نميدهد!! :افسرده:
نقل قول: مشكل Indy با فارسي
نقل قول:
ولي هنوز عنوان )subject) را فارسي نميفرسته
درباره Subject فارسی در ایمیل در همین تالار یک تاپیک دیگه هست.
نقل قول: مشكل Indy با فارسي
سلام آقاي كشاورز
همه چيز درست شد. دستتون درد نكنه فقط يه موردي ميمونه اونهم اينكه وقتي يه فايل Attach ميكنم متن ميريزه به هم :عصبانی++:
من از دستور زير براي پيوست كردن فايل استفاده ميكنم. درسته يا نه؟
TIdAttachment.Create(IdMessage1.MessageParts, 'c:\a.jpg') ;
نقل قول: مشكل Indy با فارسي
لطفا اگه كسي ميدونه راهنمايي ام كنه، خيلي كار فوريه
وقتي يك پيوست براي فايل ايجاد ميكند متن به صورت
//5UAG4AdABSAGkAYwBoAEUAZABpAHQAMQANAAoA
در مياد. واقعا نميدونم چه كار كنم
نقل قول: مشكل Indy با فارسي
نقل قول:
لطفا اگه كسي ميدونه راهنمايي ام كنه، خيلي كار فوريه
وقتي يك پيوست براي فايل ايجاد ميكند متن به صورت
//5UAG4AdABSAGkAYwBoAEUAZABpAHQAMQANAAoA
در مياد. واقعا نميدونم چه كار كنم
به نظر Base64 میاد. ببینید؛ برای همچین کارهایی باید حداقل با پروتکل های مربوطه آشنا باشید. انتظار نداشته باشید که همیجوری با نوشتن یک دستور همه کارها به طور خودکار براتون انجام بشه. وقتی از Attachment استفاده می کنید، دیگه ایمیل تون Plain Text نیست، بلکه میشه Multi-part. حالا هر Part میتونه یا Text باشه، یا Attachment، و هر Part هم میتونه Encoding و MIME Type خودش را داشته باشه. نرم افزار گیرنده هم بر اساس نوع Encoding و Type تعریف شده برای هر Part، آن را پردازش میکنه. مثلا اگر مطلبی به صورت Base64 اینکود شده باشه، اون را با یک Decoder مربوط به Base64 دیکود میکنه، تا به داده اصلی برسه.
1 ضمیمه
نقل قول: مشكل Indy با فارسي
خيلي ممنون از اينكه جواب ميدين
بله درست ميفرماييد اون متن كه گذاشتم base64 هستش و با استفاده از روشي كه در يك تاپيك ديگه مطرح كرده بودين تبديل ميشه
مشكل من هم همينه كه نميدونم چرا اين اضافه شدن فايل پيوست تاثير بر روي اصل پيام ميگذاره و نميتونم بفهمم. چون خيلي تو اين موارد سر رشته اي ندارم از دوستان ميخواستم ببينم كسي با اين مشكل برخورد كرده يا نه.
نمونه برنامه اي كه با اول ايميل ارسال ميكنم هم پيوست شده است
خيلي خوشحال ميشم اگه بتونه كسي بهم كمك بكنه