PDA

View Full Version : سوال: مشکل در نمایش ایمیل پس از ارسال ؟



Modifier
دوشنبه 27 دی 1389, 19:54 عصر
سلام

من یه فایل HTML با کد زیر رو به صورت ایمیل ارسال کردم..

<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<head>
<style type="text/css">
.style1
{
font-family: Tahoma;
}
</style>
</head>
<body>
<p class="style1" style="text-align: right">
مهدي اميرخاني شمس آبادي</p>
<br />
<br />
<img src="EmailAttach.png"
title="Image" />
</body>
</html>


وقتی بدون Attach کردن میفرستم توی بصورت یک ایمیل عادی بهم نمایش داده میشود البته مشخص است که تصویری که جایگاهش در کد مشخص است نمایش داده نمیشود..
تا اینجای کار مشکلی نیست..

ولی وقتی من ایمیل رو با فایلی مثلا تصویری که میخواهم نمایش دهم میفرستم یعنی فایل رو Attach میکنم...
حالا فایل به درستی پیوست شده ولی متن ایمیل بصورت کدهای HTML نمایش داده میشود مانند کدهایی که برایتان گذاشته ام ...

مشکل از کجاست ؟

ممنون.
یاعلی.

vcldeveloper
دوشنبه 27 دی 1389, 21:34 عصر
کدی که برای ارسال ایمیل نوشتید را اینجا قرار بدید. نسخه دلفی تان را هم ذکر کنید.

Modifier
سه شنبه 28 دی 1389, 09:12 صبح
کد ارسال :

with idMessae do
begin
ContentType := 'text/html';

if FileExists(txtFile.Text) then
Body.LoadFromFile(txtFile.Text);

Recipients.EMailAddresses := txtTo.Text;
Subject := txtSubject.Text;

if FileExists(txtAttachment.Text) then
TIdAttachment.Create(MessageParts, txtAttachment.Text);
end;

{Get General Setup From Db}
idSmtp.Username := qryConTemp.fieldbyname('MailAccount').AsString;
idSmtp.Password := qryConTemp.fieldbyname('Password').AsString;
idSmtp.Host := qryConTemp.fieldbyname('SMTPServer').AsString;
idSmtp.Port := qryConTemp.fieldbyname('Port').AsInteger;

idSmtp.Connect;

try
idSmtp.Send(idMessae);
finally
idSmtp.Disconnect;
end;


از دلفی 7 استفاده میکنم.

Modifier
سه شنبه 28 دی 1389, 10:27 صبح
یه نکته به ذهنم رسید گفتم بگم :

حتما با InnerHTML آشنایی دارین...
با این خصوصیت میتونیم در داخل کدهای HTML صفحات وب ، کدهای HTML ی رو قرار بدیم که برای Browser مثل یه متن عادی باشه و کامپایل نشه...
متنی ه میفرستم یعنی همون فایل HTML وقتی با Attach میفرستم به همین شکل در میآد که توسط Browser به عنوان کد HTML شناخته نمیشه...

vcldeveloper
سه شنبه 28 دی 1389, 14:24 عصر
وقتی فایل پیوستی دارید، باید برید سراغ حالت Multipart که از طریق خصوصیت MessageParts در دسترس هست. در اون صورت، پیام شما باید حداقل 2 part داشته باشه: اول، Part ایی به صورت Text برای نگهداری HTML. دوم، Part ایی به صورت Attachment برای نگهداری فایل. البته نرم افزارهای ایمیل معمولا در هنگام ارسال HTML، یک Part هم به صورت Text اضافه می کنند، که در اون همان متن HTML به صورت Plain Text و بدون تگ های HTML ذخیره میشه. این حالت برای این هست که اگر گیرنده دریافت ایمیل به صورت HTML را غیرفعال کرده بود، بتونه به صورت متن عادی پیام را دریافت کنه.

Modifier
سه شنبه 28 دی 1389, 15:24 عصر
با تشکر از راهنماییتون ...
من با توجه به صخبت شما یه تستی زدم...
2تا فایل Attach کردم با کد زیر :

idMessae.MessageParts.Count
مقدار 2 نمایش داد

با کد زیر :

idMessae.MessageParts.TextPartCount
مقدار 0 را برگشت داد

با کد زیر:

idMessae.MessageParts.AttachmentCount
مقدار 2 برگشت داد

پس مشخصه که ما قسمت Text رو نداریم ...

چطور اضافش کنم..؟

Modifier
سه شنبه 28 دی 1389, 16:10 عصر
من با کد زیر قسمت Text رو اضافه کردم :

ContentType := 'text/html';
if FileExists(txtFile.Text) then
Body.LoadFromFile(txtFile.Text);

TIdText.Create(MessageParts,Body);


ولی بازم نشد....

vcldeveloper
سه شنبه 28 دی 1389, 18:12 عصر
TIdText.Create(MessageParts,Body);

اینجوری که یک شی رو Create نمی کنند، باید اینطوری می نوشتید:


var
TextPart : TIdText;
begin
...
TextPart := TIdText.Create(MessageParts,Body);
...
end;

Modifier
چهارشنبه 29 دی 1389, 14:33 عصر
من برای اضافه کردن فایل های Attach شده به TIdMessage اینگونه عمل کردم :

TIdAttachment.Create(idMessae.MessageParts,fileNam e);
و مشکلی پیش نیومد ...

حالا..
با توجه به صحبت شما ..
من شئ رو بسازم و بریزم توی یه متغیر... بعدش چیکارش کنم ؟ چطور اضافش کنم به idMessage.MessagePart ؟

Modifier
پنج شنبه 30 دی 1389, 16:00 عصر
لطفاً میشه بگین که من چطور این TextPart رو به idMessage اضافه کنم ؟ من هر کاریش میکنم جواب نمیده و ایمیل فرستاده شده درست نمایش داده نمیشه ؟
والا اصلا نمیدونم چه مشکلی داره ؟ هر چی هم سرچ میزنم هیچی به هیچی ...

vcldeveloper
پنج شنبه 30 دی 1389, 17:45 عصر
من شئ رو بسازم و بریزم توی یه متغیر... بعدش چیکارش کنم ؟ چطور اضافش کنم به idMessage.MessagePart ؟
لازم نیست شما کاری برای اضافه کردنش به MessageParts انجام بدید. همینکه در زمان Create کردن، مقدار IdMessage.MessageParts را به عنوان پارامتر بهش پاس میدید، خودش، خودش را به IdMessage.MessageParts اضافه میکنه.