Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.10.2016, 14:42
djmix djmix вне форума
Прохожий
 
Регистрация: 24.06.2014
Сообщения: 46
Версия Delphi: Delphi 7
Репутация: 10
Вопрос отправка *.msg файла

посмотрел в инете, есть масса способов отдельно послать из командной строки отдельно и файл и текст и адресата
и всё вроде бы ровно. НО

в приложении к теме
выкладываю файлик MSG

в нём уже указан адресат в поле кому

есть тема, тело письма , есть вложение.

задача такая вот. хочу из дельфи отправлять этот файл используя ИЗ него всё выше перечисленное, выбрать в приложении учётную от кого отправляю и отправить .

в аутлуке у меня несколько учётных записей.
мне пользователь в чате пишет отправь почту , я на текущий момент открываю письмо , выбираю это пользователя (как отправителя) и жму отправить. вот и хочу облегчить из командной строки тоже реализовать.


вопрос только как это сделать пока не знаю.

что сможете посоветовать. я могу скинуть пару вариантов что нашёл, но только там всё по раздельности надо
Вложения
Тип файла: zip 1test.zip (37.1 Кбайт, 2 просмотров)
Ответить с цитированием
  #2  
Старый 12.10.2016, 19:50
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Перед тем как отправить, письмо нужно его открыть чтоб узнать адрес получателя, проще всего делать это в "родном" 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  
Старый 13.10.2016, 13:47
djmix djmix вне форума
Прохожий
 
Регистрация: 24.06.2014
Сообщения: 46
Версия Delphi: Delphi 7
Репутация: 10
Вопрос

начал пробовать по подсказанному коду выше,
дошёл пока до такого варианта

Код:
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  
Старый 14.10.2016, 13:40
djmix djmix вне форума
Прохожий
 
Регистрация: 24.06.2014
Сообщения: 46
Версия Delphi: Delphi 7
Репутация: 10
Печаль

нуждаюсь в вашей помощи, голову сломал что сделать уже не знаю с последним вопросом. спасибо!
Ответить с цитированием
  #5  
Старый 14.10.2016, 15:32
djmix djmix вне форума
Прохожий
 
Регистрация: 24.06.2014
Сообщения: 46
Версия Delphi: Delphi 7
Репутация: 10
Печаль

Код:
:: 
:: 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  
Старый 18.10.2016, 07:11
djmix djmix вне форума
Прохожий
 
Регистрация: 24.06.2014
Сообщения: 46
Версия Delphi: Delphi 7
Репутация: 10
Вопрос

Цитата:
Сообщение от djmix
Код:
:: 
:: 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 
:: 
 



придётся по ходу батник формировать, но может кто ответит?
таким путём фигня получается, гораздо дольше и не нужная инфа)
полезно хотя бы, что могу разбирать письма)


нашёл вот такой код
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  
Старый 18.10.2016, 12:12
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от djmix
...нажимая в программе на письмо, увидеть список всех учёток и выбрать необходимую от кого отправить.
Так из письма список учёток выдирается или он должон из общего списка формироваться? И что мешает завести глобальный StringList с этими данными

Оффтоп\совет: когда копипастите из делфийского редактора код, меняйте раскладку клавы на RU
Ответить с цитированием
  #8  
Старый 18.10.2016, 13:29
djmix djmix вне форума
Прохожий
 
Регистрация: 24.06.2014
Сообщения: 46
Версия Delphi: Delphi 7
Репутация: 10
Вопрос

Цитата:
Сообщение от Alegun
Так из письма список учёток выдирается или он должон из общего списка формироваться? И что мешает завести глобальный StringList с этими данными
список учёток выдрать из аутлука и предстать передо мной в виде списка, выбирая из этого списка учётку, жму отправить.

проблема - как при открытии письма, изначально указать от кого слать письмо




Код:
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  
Старый 18.10.2016, 15:08
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Нету у меня оффиса в наличии, нечем проверить, но вот хороший пример по теме
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:07.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter