|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
отправка *.msg файла
посмотрел в инете, есть масса способов отдельно послать из командной строки отдельно и файл и текст и адресата
и всё вроде бы ровно. НО в приложении к теме выкладываю файлик MSG в нём уже указан адресат в поле кому есть тема, тело письма , есть вложение. задача такая вот. хочу из дельфи отправлять этот файл используя ИЗ него всё выше перечисленное, выбрать в приложении учётную от кого отправляю и отправить . в аутлуке у меня несколько учётных записей. мне пользователь в чате пишет отправь почту , я на текущий момент открываю письмо , выбираю это пользователя (как отправителя) и жму отправить. вот и хочу облегчить из командной строки тоже реализовать. вопрос только как это сделать пока не знаю. что сможете посоветовать. я могу скинуть пару вариантов что нашёл, но только там всё по раздельности надо |
#2
|
||||
|
||||
Перед тем как отправить, письмо нужно его открыть чтоб узнать адрес получателя, проще всего делать это в "родном" Outlook посредством установки в среду OLE-интерфейсной Outlook Object Library, вот вариант показа адресата
Код:
var App : OutlookApplication; NS : _Namespace; Msg : _MailItem; begin App := CreateOleObject('Outlook.Application'); NS := App.GetNamespace('MAPI'); NS.Logon; Msg := NS.OpenSharedItem('1test.msg'); ShowMessage(Msg.ToList); // получатель end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
djmix (13.10.2016)
|
#3
|
|||
|
|||
начал пробовать по подсказанному коду выше,
дошёл пока до такого варианта Код:
var Form1: TForm1; App, NameSpace, MyMsg : OleVariant; NumMails: integer; outlook: OLEvariant; //folder: OLEvariant; MailCounter: integer; MailMessage: variant; NumAtt: integer; counter,counterLIST: integer; ATTFile : variant; FILENAME,FilenameNew : string; savetofol: string; thedocdone, theacc: string; implementation uses ComObj; {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin label8.Caption:= IntToStr(CounterList); label9.Caption:= IntToStr(NumAtt); end; procedure TForm1.FileListBox1Click(Sender: TObject); begin Edit1.Text:= FileListBox1.FileName; Listbox1.Items.Clear; App := CreateOleObject('Outlook.Application'); NameSpace := App.GetNamespace('MAPI'); NameSpace.Logon; MyMsg := NameSpace.OpenSharedItem(Edit1.Text); Edit2.text:= MyMsg.To; Edit3.text:= MyMsg.CC; Edit4.text:= MyMsg.BCC; Edit5.text:= MyMsg.Subject; Memo1.Text:= MyMsg.Body; NumAtt:=Mymsg.attachments.count; Label7.caption:='Âñåãî '+inttostr(NumAtt)+' âëîæåíèé(èÿ)(èå)'; for counter:=1 to NumAtt do BEGIN Attfile:=Mymsg.Attachments.item(counter).filename; Filename:='D:\PROJECT\SendMailGUI\my\tempm\'+Attfile; FilenameNew:='D:\PROJECT\SendMailGUI\my\tempnew\'+Attfile; Mymsg.attachments.item(counter).saveasfile(filename); //CopyFile(PChar(filename),PChar(FilenameNew),false); label8.Caption:= IntToStr(CounterList); label8.Caption:= IntToStr(NumAtt); Listbox1.Items.Add(Attfile); //ListBox1.Sorted := True; //DeleteFile(filename); End; end; не понятен момент как указать от какого пользователя (с какой учётной записи) отправлять письмо. Последний раз редактировалось djmix, 14.10.2016 в 10:33. |
#4
|
|||
|
|||
нуждаюсь в вашей помощи, голову сломал что сделать уже не знаю с последним вопросом. спасибо!
|
#5
|
|||
|
|||
Код:
:: :: Send email notifications from cli via Mail.ru :: chcp 1251 set mailsender=mailsend.exe set smtpsender=username@mail.ru set smtpsenderfullname=User Name set smtpserver=smtp.mail.ru set smtpport=465 set smtpuser=username@mail.ru set smtppwd="password" set mailto=usernanme@yandex.ru set subject="Тестовая тема" set body="Тестовый текст" set attach="C:\file.txt" :: :: %mailsender% -smtp %smtpserver% -port %smtpport% -ssl -auth -user %smtpuser% -pass %smtppwd% -t %mailto% -f "%smtpsender%" -name "%smtpsenderfullname%" -cs 1251 +cc +bc -q -attach %attach% -sub %subject% -M %body% :: pause :: придётся по ходу батник формировать, но может кто ответит? |
#6
|
|||
|
|||
Цитата:
полезно хотя бы, что могу разбирать письма) нашёл вот такой код https://www.add-in-express.com/creat...tlook-message/ помогите преобразовать на дельфи Код:
using System.Runtime.InteropServices; using Outlook = Microsoft.Office.Interop.Outlook; ... void SetAccount_2007_2010(Outlook.MailItem mail, string accountName) { Outlook.NameSpace session = mail.Session; Outlook.Accounts accounts = session.Accounts; for (int i = 1; i < = accounts.Count; i++) { Outlook.Account account = accounts[i]; if (account.DisplayName.ToLower() == accountName.ToLower()) { mail.SendUsingAccount = account; Marshal.ReleaseComObject(account); break; } Marshal.ReleaseComObject(account); } Marshal.ReleaseComObject(accounts); Marshal.ReleaseComObject(session); } Imports System.Runtime.InteropServices Imports Outlook = Microsoft.Office.Interop.Outlook ... Sub SetAccount_2007_2010(ByRef mail As Outlook.MailItem, _ ByVal accountName As String) Dim session As Outlook.NameSpace = mail.Session Dim accounts As Outlook.Accounts = session.Accounts For i As Integer = 1 To accounts.Count Dim account As Outlook.Account = accounts(i) If account.DisplayName.ToLower() = accountName.ToLower() Then mail.SendUsingAccount = account Marshal.ReleaseComObject(account) Exit For End If Marshal.ReleaseComObject(account) Next i Marshal.ReleaseComObject(accounts) Marshal.ReleaseComObject(session) End Sub и вот пример на С шарпе Код:
using System; using System.Text; using Outlook = Microsoft.Office.Interop.Outlook; namespace OutlookAddIn1 { class Sample { public static void SendEmailFromAccount(Outlook.Application application, string subject, string body, string to, string smtpAddress) { // Create a new MailItem and set the To, Subject, and Body properties. Outlook.MailItem newMail = (Outlook.MailItem)application.CreateItem(Outlook.OlItemType.olMailItem); newMail.To = to; newMail.Subject = subject; newMail.Body = body; // Retrieve the account that has the specific SMTP address. Outlook.Account account = GetAccountForEmailAddress(application, smtpAddress); // Use this account to send the e-mail. newMail.SendUsingAccount = account; newMail.Send(); } public static Outlook.Account GetAccountForEmailAddress(Outlook.Application application, string smtpAddress) { // Loop over the Accounts collection of the current Outlook session. Outlook.Accounts accounts = application.Session.Accounts; foreach (Outlook.Account account in accounts) { // When the e-mail address matches, return the account. if (account.SmtpAddress == smtpAddress) { return account; } } throw new System.Exception(string.Format("No Account with SmtpAddress: {0} exists!", smtpAddress)); } } } ещё раз повторюсь, сейчас только осталось добиться - нажимая в программе на письмо, увидеть список всех учёток и выбрать необходимую от кого отправить. |
#7
|
||||
|
||||
Цитата:
Оффтоп\совет: когда копипастите из делфийского редактора код, меняйте раскладку клавы на RU Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#8
|
|||
|
|||
Цитата:
проблема - как при открытии письма, изначально указать от кого слать письмо Код:
var Form1: TForm1; App, NameSpace, MyMsg : OleVariant; NumMails: integer; outlook, accounts: OLEvariant; MailCounter: integer; MailMessage: variant; NumAtt: integer; counter,counterLIST: integer; ATTFile : variant; FILENAME,FilenameNew : string; savetofol: string; fullFileName : string; MessageFile : string; implementation uses ComObj; {$R *.dfm} procedure TForm1.FileListBox1Click(Sender: TObject); begin Edit1.Text:= FileListBox1.FileName; Listbox1.Items.Clear; MessageFile:=Edit1.Text; label13.Caption:= ExtractFileName(MessageFile); try App := GetActiveOleObject('Outlook.Application'); except App := CreateOleObject('Outlook.Application'); end; NameSpace := App.GetNamespace('MAPI'); NameSpace.Logon; MyMsg := NameSpace.OpenSharedItem(Edit1.Text); Edit2.text:= MyMsg.To; Edit3.text:= MyMsg.CC; Edit4.text:= MyMsg.BCC; Edit5.text:= MyMsg.Subject; //Edit6.text:= MyMsg.FromAddr; Memo1.Text:= MyMsg.Body; //CheckBox1.Checked:=MyMsg.DeliveryNotification; //CheckBox2.Checked:=MyMsg.ReadReceipt; NumAtt:=Mymsg.attachments.count; Label7.caption:=inttostr(NumAtt); for counter:=1 to NumAtt do BEGIN Attfile:=Mymsg.Attachments.item(counter).filename; Filename:='D:\PROJECT\SendMailGUI\my\tempm\'+Attfile; FilenameNew:='D:\PROJECT\SendMailGUI\my\tempnew\'+Attfile; Mymsg.attachments.item(counter).saveasfile(filename); //CopyFile(PChar(filename),PChar(FilenameNew),false); label8.Caption:= IntToStr(CounterList); label8.Caption:= IntToStr(NumAtt); Listbox1.Items.Add(Attfile); //ListBox1.Sorted := True; //DeleteFile(filename); End; Button3.Enabled:=True; end; procedure TForm1.Button3Click(Sender: TObject); begin {try MyMsg.Display; except on e:Exception do raise EExternal.Create(' ' + e.Message); end; } if DirectoryExists(label12.Caption+'\send\') then else CreateDir(label12.Caption+'\send\'); if length(Edit1.Text) > 6 then begin Mymsg.Send; NameSpace.LogOff; // if //CopyFile(PChar(Edit1.Text),PChar(label12.Caption+'\send\'+label13.Caption),false); //DeleteFile(Edit1.Text); FileListBox1.Update; Edit1.text:='*.msg'; end; Button3.Enabled:=False; end; |
#9
|
||||
|
||||
Нету у меня оффиса в наличии, нечем проверить, но вот хороший пример по теме
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |