![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
посмотрел в инете, есть масса способов отдельно послать из командной строки отдельно и файл и текст и адресата
и всё вроде бы ровно. НО в приложении к теме выкладываю файлик 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));
}
}
}ещё раз повторюсь, сейчас только осталось добиться - нажимая в программе на письмо, увидеть список всех учёток и выбрать необходимую от кого отправить. |