Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.12.04;
Скачать: [xml.tar.bz2];

Вниз

Отправка почты с вложением файла   Найти похожие ветки 

 
duny   (2003-10-07 18:26) [0]

Уважаемые мастера помогите начинающему отправить E-mail из моей программы с помощью Outlook Express и к тому-же вставить картинку и сделать вложение файла. Пересмотрел кучу FAQ но не нашел такого.


 
Hazard   (2003-10-08 00:43) [1]

Кусок из моего рабочего Unit"а OutLookUn, реально работает,
Прошу мастеров сильно не ругать, не хватает времени на доработку кода, после сессии обязательно завершу!!!

to Duni: Обязательно должен быть установлен OutLook (я работаю с OutLook2000), и обязательно должны быть установлены ОБЪЕКТЫ СОВМЕСТНОЙ РАБОТЫ (это ставится при установке OutLooka)

unit Outlook_UN;
Interface
uses
SysUtils, Variants, Classes,
Dialogs, Outlook8, OleServer;

type //Класс для создания почтовых сообщений
TSMail = class(TObject)

procedure ClearAttachList;
procedure ClearBodyLetter;

procedure CreateMessage;
Constructor Create;
Destructor Destroy;
private
MailToList :TStrings;
AttachList :TStrings;
BodyLetter :TStrings;
MailFrom :String;
ThemeLetter:String;
FaceBody :String;
procedure putAttachList(NewAttach:TStrings);
function getAttachList: TStrings;
procedure putBodyLetter(New_Body:TStrings);
function getBodyLetter:TStrings;
procedure Put_MailTo(E_Mail:TStrings);
function Get_MailTo:TStrings;
procedure Put_MailFrom(E_Mail:String);
function Get_MailFrom:String;

public
property SetThemeLetter: String write ThemeLetter;
property SetFaceBody : String write FaceBody;
property New_Attachment: TStrings read getAttachList write putAttachList;
property New_BodyLetter: TStrings read getBodyLetter write putBodyLetter;
property E_MailTo : TStrings read Get_MailTo write Put_MailTo;
property E_MailFrom : String read Get_MailFrom write Put_MailFrom;
end;

type //Адресная книга
TAdressBook = class (TObject)
private
AddressList:TStrings;
public
procedure Execute;
property AddressBook: TStrings read AddressList;
constructor Create;
Destructor Destroy;
end;

//--------------------------------------------------TSMail----------------------
procedure TSMail.Put_MailTo(E_Mail:TStrings);
Begin
MailToList:=E_Mail;
end;

function TSMail.Get_MailTo:TStrings;
Begin
Result:=MailToList;
end;

procedure TSMail.Put_MailFrom(E_Mail:String);
Begin
MailFrom:=E_Mail;
end;

function TSMail.Get_MailFrom:String;
Begin
Result:=MailFrom;
end;

function TSMail.getAttachList:TStrings;
Begin
Result:=AttachList;
end;

procedure TSMail.putAttachList(NewAttach:TStrings);
Begin
AttachList:=NewAttach;
end;

function TSMail.getBodyLetter:TStrings;
Begin
Result:=BodyLetter;
end;

procedure TSMail.putBodyLetter(New_Body:TStrings);
Begin
BodyLetter:=New_Body;
end;

procedure TSMail.ClearBodyLetter;
Begin
BodyLetter.Clear;
end;

procedure TSMail.ClearAttachList;
Begin
AttachList.Clear;
end;
//------------------------------------------------------------------------------
procedure TSMail.CreateMessage;
const
// константы OlItemType
olMailItem = 0;
olAppointmentItem = 1;
olContactItem = 2;
olTaskItem = 3;
olJournalItem = 4;
olNoteItem = 5;
olPostItem = 6;
// константы OlAttachmentType
olByValue = 1;
olByReference = 4;
olEmbeddedItem = 5;
olOLE = 6;
var
myOlApp, myItem, myRecipient, myAttachments: oleVariant;
i:Word;
BodyString:String;
Begin
CoInitialize(nil);
myOlApp := CreateOLEObject("Outlook.Application");
myItem := myOlApp.CreateItem(olMailItem);

myItem.Subject :=ThemeLetter;

if MailToList.Count>0 then Begin
if MailToList.Count=1 then myRecipient := myItem.Recipients.Add(MailToList.Strings[0])
else
for i:=0 to MailToList.Count-1 do Begin
myRecipient := myItem.Recipients.Add(MailToList.Strings[i]);
end;
end;{if}

myItem.Body := #13;
myItem.Body := myItem.Body + #13;
myItem.Body := myItem.Body + #13+FaceBody+ #13;

if BodyLetter.Count>0 then Begin
if BodyLetter.Count=1 then BodyString:=BodyString+BodyLetter.Strings[0]+#13
else
for i:=0 to BodyLetter.Count-1 do Begin
BodyString:=BodyString+BodyLetter.Strings[i]+#13;
end;
myItem.Body :=myItem.Body+#13+BodyString+#13;
end;{if}

myAttachments := myItem.Attachments;

if AttachList.Count>0 then Begin
for i:=0 to AttachList.Count-1 do Begin
myAttachments.Add(AttachList.Strings[i] , olByValue, i+1,ExtractFileName(AttachList.Strings[i]));
end;
end;{if}
myItem.Send;
myOlApp := VarNull;
myItem := VarNull;
myRecipient := VarNull;
myAttachments := VarNull;
CoUninitialize;
end;

Constructor TSMail.Create;
Begin
Inherited;
AttachList:=TStringList.Create;
BodyLetter:=TStringList.Create;
MailToList:=TStringList.Create;
end;

Destructor TSMail.Destroy;
Begin
AttachList.Free;
BodyLetter.Free;
MailToList.Free;
Free;
end;

//-----------------------------------------TAddressBook-------------------------

procedure TAdressBook.Execute;
var
MSOutlook, MyNameSpace, MyFolder, MyItem: Variant;
i:Integer;
begin
Try
MSOutlook := CreateOleObject("Outlook.Application");
MyNameSpace := MSOutlook.GetNameSpace("MAPI");
MyFolder := MyNamespace.GetDefaultFolder(olFolderContacts);
for i := 1 to MyFolder.Items.Count do
begin
MyItem := MyFolder.Items[i];
AddressList.Add(MyItem.Subject+#14+MyItem.Email1Address+#14);
end;
MSOutlook.Quit;
Except
ShowMessage("ошибка# - не установлен Outlook");
end;
end;

Constructor TAdressBook.Create;
Begin
Inherited;
AddressList:=TStringList.Create;
end;

Destructor TAdressBook.Destroy;
Begin
AddressList.Free;
Free;
end;
//------------------------------------------------------------------------------

и примеры вызова

Создание сообщения...

procedure ....
Var
m :TSMail;
Begin
m:=TSMail.Create;
With m do Begin
New_Attachment :=...... ; //Прикрепляемые файлы (путь до них)
E_MailTo :=...... ; //кому отправляешь
SetThemeLetter :=...... ; //тема письма
SetFaceBody :=...... ; //не обязательно (этот прибабмбас только для специфики моей программы)
New_BodyLetter :=...... ; //текст письма
CreateMessage;
m.Free;
end;
end;

Адресная книга...

procedure ...
Var
AddrBook_OBJ :TAdressBook;
MailList:TStrings;

Begin
MailList:=TStrinsList.Create;
AddrBook_OBJ:=TAdressBook.Create;
AddrBook_OBJ.Execute;
MailList.Clear;
MailList:=AddrBook_OBJ.AddressBook;//Берем адреса из OutLook"а
.....
end;

P.S.
Вроде бы как ничего не забыл :/


 
Hazard   (2003-10-08 00:54) [2]

Да, надо было еще сказать что просто OutLook Express не представляет таких сервисов доступа к своим данным и это возможно только через OutLook из пакета MSOffice

Данный код основан на примере Eddie Shipman"а

Создаётся OLE-объект - "Outlook.Application" и в него передаётся VB Script


 
duny   (2003-10-08 14:34) [3]

У меня вот такой код
procedure TfmTable.SpeedButton1Click(Sender: TObject);
var Adres, Tema, String1,String2, mailstring: string;
begin
Adres:= dm.iPersonal["E_MAIL"];
Tema := "Прайс лист маг. "Good Year" "+DateToStr(Date);
String1 := "Здравствуйте! ";
String2 := "Смотрите, выбирайте,звоните. (0562) 454005, 366674 ";
// Хотелось бы ещё сюда сделать вложение
mailstring := "mailto:" + Adres +
"?subject=" + Tema +
"&body=" + String1 +
"%0D%0A" + String2;
ShellExecute(0, "open", PChar(mailstring), "", "",SW_SHOWNORMAL)
end;

Я так понял что просто не получится.
Спасибо всем кто ответил. Буду разбираться с Outlook_ом из Офиса


 
Lola   (2003-10-08 15:34) [4]

А что ты испугался? Довольно просто всё. Только тебе Hazard много лишнего написал (видимо свои моменты не выгрызал) А так сама процедура отправки небольшая.

procedure TForm1.btSendClick(Sender: TObject);
const
// константы OlItemType
olMailItem = 0;
olAppointmentItem = 1;
olContactItem = 2;
olTaskItem = 3;
olJournalItem = 4;
olNoteItem = 5;
olPostItem = 6;
// константы OlAttachmentType
olByValue = 1;
olByReference = 4;
olEmbeddedItem = 5;
olOLE = 6;
var
myOlApp, myItem, myRecipient, myAttachments: OleVariant;
begin

// файл VBScript для создания почтового сообщения и прикрепления к нему файла
myOlApp := CreateOLEObject("Outlook.Application");
myItem := myOlApp.CreateItem(olMailItem);
myItem.Subject := "This is the Subject";
varRecipient:=Edit7.Text ;
myRecipient := myItem.Recipients.Add(varRecipient); //pcemoscow@pcelimited.com
myItem.Body := #13;
myItem.Body := myItem.Body + " "; // Hello!
{ myItem.Body := myItem.Body + "This code created this message and "+" sent it and I didn""t even have" + #13;
myItem.Body := myItem.Body + "to click the send button!!!" + #13; }

// Теперь прикрепим файлы...
myAttachments := myItem.Attachments;
myAttachments.Add(FileName1, olByValue, 1, FileName1+" Attachment"); // FileName1 - имя прикрепляемого файла с маршрутом
myItem.Send ;
myOlApp := VarNull;
myItem := VarNull;
myRecipient := VarNull;
myAttachments := VarNull;
myOlApp := Unassigned;

end;

Вот и всё.


 
Lola   (2003-10-08 15:36) [5]

Да, еще здесь в FAQ есть процедура проверки правильности e-mail адресов, её тоже полезно использовать.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.12.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.006 c
8-11618
Fenik
2003-07-23 01:39
2003.12.04
Метод Dormant


9-11575
greenrul
2003-05-19 02:55
2003.12.04
Реализация изменцивых от ситуации диалогов в RPG:


3-11593
Infinity1
2003-11-16 16:58
2003.12.04
LookUp Combo


3-11588
rtooo
2003-11-13 21:57
2003.12.04
какими базами для этого лучше всего пользоваться


6-11654
ilka
2003-10-01 15:01
2003.12.04
TIdHttpServer TIdHttp TIdTCPClient TIdTCPServer





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский