Page 1 of 2
Mapi Outlook .. send mail silently
Posted: Sat Dec 07, 2019 7:19 pm
by Rick Lipkin
To All
Below is the code to create a Mapi call to Outlook to create an Outlook e-mail ... however, I would like the whole process be silent and be able to launch the SEND button automatically without being seen nor have any interaction with the user.
When I run the code .. an Outlook e-mail is generated, but the user has to click on the Send button ... unfortunately I can not use CDO .. because my client has a "blurb" "This came from the internet warning" embedded in the CDO text and for security reasons, the client has SMTP closed off but to all registered devices like MFP, multi function printers that scan to e-mail.
The only other option is to use their corporate Outlook client.... as you can see .. I can create the e-mail, but it takes the client to click the send button .. Any idea on how to make the entire process silent and be able to button:Click() the Send button to launch the e-mail ...
Appreciate any advice and help
Thanks
Rick Lipkin
Code: Select all
//----
#Include "FiveWin.ch"
#Include "Mail.ch"
//----------------------------
Func Main()
Local oDlg
Local oSay1,cSay1,oSay2,cSay2
LOCAL oBtn1,oBtn2
Local oSubject,oTo
Local cSubject,cTo
Local oMemo,cMemo
Local oFontB
cSubject := space(50)
cTo := Space(40)
cMemo := "Please fund my trip to the Bahamas"
cSubject := "Trip to the Bahamas"
cTo := substr("r1.1955@live.com"+space(40),1,40)
oFontB := TFont():New("Ms Sans Serif",,-6,.F.,.T. ,,,,.F. )
DEFINE DIALOG oDlg RESOURCE "MEMO" ;
cSay1 := "Subject"
cSay2 := "To"
REDEFINE SAY oSay1 var cSay1 ID 301 of oDlg UPDATE
oSay1:SetFont( oFontB )
REDEFINE SAY oSay2 var cSay2 ID 300 of oDlg UPDATE
oSay2:SetFont( oFontB )
REDEFINE GET oSubject var cSubject ID 303 of oDlg UPDATE
REDEFINE GET oTo var cTo ID 302 of oDlg UPDATE
REDEFINE GET oMEMO VAR cMEMO MEMO ID 304 of oDlg UPDATE
REDEFINE BTNBMP oBtn1 ID 111 of oDlg ;
PROMPT "Create Mail" LEFT 2007;
ACTION ( _SendMapiMail( cTo, cMemo, cSubject , oDLg ) )
REDEFINE BTNBMP oBtn2 ID 112 OF oDlg ;
PROMPT "Cancel" LEFT 2007;
ACTION ( oDlg:END() )
ACTIVATE DIALOG oDlg ;
ON INIT( oDlg:Hide(),oBtn1:Click() );
VALID (!GETKEYSTATE( 27 )) // do not allow esc key here
Release Font oFontB
Return( nil )
//---------------------------------
Static Func _SendMAPIMail( MailTo, cText, cSubj,oDlg )
PRIVATE oMail
MailTo := TRIM( MailTo )
DEFINE MAIL oMail ;
SUBJECT cSubj ;
TEXT cText ;
FROM USER ;
TO MailTo
ACTIVATE MAIL oMail
oMail:ENd()
oDlg:Show()
oDlg:ENd()
RETURN( .t. )
Re: Mapi Outlook .. send mail silently
Posted: Sun Dec 08, 2019 8:32 am
by Marc Vanzegbroeck
Rick,
Maybe you can use blat.exe to send email for this customer.
I also have two options in my program. If the file blat.exe exist in de program-directory, it use blat.exe, otherwise the normal way.
Re: Mapi Outlook .. send mail silently
Posted: Mon Dec 09, 2019 9:16 pm
by Jimmy
hi,
i'm a Fivewin Newbiew so excuse my Question :
the Snapshot show Outlook Client which you get with
Code: Select all
::oItem := ::oItem:dynamicCast( ActiveXObject() )
::oItem:Display()
so you write your Email "in" Outlook
---
i write my Email in a RTF Control and send it via MAPI to Outlook "Out" Basket
Outlook is configure to look for new Email every xxx Minute so it is send "automatic"
there was a Trick to "reduce" Time between Outlook go online to search for new Email.
i have to search it while i do not use it. i doen't matter if a Email is send 1 Hour later
---
now i have written a Email Client using harbour hbTIP LIB which support SSL.
Re: Mapi Outlook .. send mail silently
Posted: Tue Dec 10, 2019 11:00 pm
by TimStone
Rick,
I wanted to do the same thing. MAPI is an excellent solution, but when we have a series of automated emails, that is just not an option to click on every one of them.
I looked for the option a while back, but could not find one. I shall try to look again.
Tim
Re: Mapi Outlook .. send mail silently
Posted: Wed Dec 11, 2019 2:14 pm
by Rick Lipkin
Tim
Thanks ... automating Outlook is my clients choice ... I welcome your efforts!
Rick Lipkin
Re: Mapi Outlook .. send mail silently
Posted: Thu Dec 12, 2019 2:49 am
by Jimmy
sorry about 1st Mail ... your Form look like Outlook
i'm still a FiveWin User so i do not know if my Idea work under FiveWin:
Code: Select all
Static Func _SendMAPIMail( MailTo, cText, cSubj,oDlg )
LOCAL nRet := 0
LOCAL oMail := TMail():New(cSubject, cNoteText, cMsgType, cConversationID,;
dDate, cTime, lReceipt, lFromUSer, aOrigin, aRecipients,;
aFiles )
oMail:Activate()
// Result MAPISendMail()
nRet := oMail:nRetCode
oMail:End()
RETURN nRet
Re: Mapi Outlook .. send mail silently
Posted: Fri Dec 13, 2019 3:50 pm
by karinha
For new users, C:\FWH\SAMPLES\MAPLOOK.PRG - complete.
Code: Select all
#include "FiveWin.ch"
#include "Mail.ch"
#Define CLR_MENTA nRGB( 221, 255, 238 ) //-> Cor de Menta
#Define CLR_SOFTYELLOW nRGB( 255, 251, 225 )
MEMVAR oDlg
FUNCTION Main()
LOCAL oSay1, cSay1, oSay2, cSay2, oSay3, cSay3, oBtn1, oBtn2, ;
oSubject, oTo, cSubject, cTo, oMemo, cMemo, oFontB, oFnt, oFont
cSubject := SPACE( 50 )
cTo := SPACE( 40 )
// cMemo := SPACE(1000) //"Please fund my trip to the Bahamas"
cMemo := "cMemo - Corpo do email - Email body"
cSubject := "cSubject -> Assunto do email"
cTo := substr( "kapiabafwh@gmail.com" + space( 40 ), 1, 40 )
cSay1 := "Assunto(Subject):"
cSay2 := "Para(To):"
SetBalloon( .T. )
SkinButtons()
SetGetColorFocus( CLR_MENTA )
tGet():lDisColors := .F.
tGet():nClrTextDis := CLR_HBLUE
tGet():nClrPaneDis := CLR_SOFTYELLOW
DEFINE FONT oFnt NAME "Ms Sans Serif" SIZE 0, 14 BOLD
DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 0, -14 BOLD
DEFINE DIALOG oDlg RESOURCE "MEMO"
oDlg:lHelpIcon := .F.
REDEFINE SAY oSay1 VAR cSay1 ID 401 of oDlg UPDATE
oSay1:SetFont( oFont )
REDEFINE SAY oSay2 VAR cSay2 ID 402 of oDlg UPDATE
oSay2:SetFont( oFont )
REDEFINE SAY oSay3 VAR cSay3 ID 403 of oDlg UPDATE
oSay3:SetFont( oFont )
// cSubject := "cSubject -> Assunto do email"
REDEFINE GET oSubject VAR cSubject ID 302 OF oDlg PICTURE "@K" UPDATE ;
FONT oFnt COLORS CLR_BLACK, CLR_WHITE
// cTo := substr( "kapiabafwh@gmail.com" + space( 40 ), 1, 40 )
REDEFINE GET oTo VAR cTo ID 303 OF oDlg PICTURE "@K" UPDATE ;
FONT oFnt COLORS CLR_BLACK, CLR_WHITE
// cMemo := "cMemo - Corpo do email - Email body"
REDEFINE GET oMEMO VAR cMEMO MEMO ID 304 OF oDlg UPDATE FONT oFont
REDEFINE BTNBMP oBtn1 ID 111 of oDlg 2007 ;
ACTION ( _SendMapiMail( cTo, cMemo, cSubject ) )
oBtn1:cToolTip := "Crie e envie o email"
REDEFINE BTNBMP oBtn2 ID 112 OF oDlg 2007 ;
ACTION ( oDlg:End() )
oBtn2:cToolTip := "Saida - Exit"
SET FONT OF oBtn1 TO oFont
SET FONT OF oBtn2 TO oFont
ACTIVATE DIALOG oDlg CENTERED
RELEASE Font oFnt
RELEASE Font oFont
RETURN NIL
STATIC FUNC _SendMAPIMail( MailTo, cText, cSubj )
LOCAL oMail, nRet := .F.
MailTo := TRIM( MailTo )
DEFINE MAIL oMail ;
SUBJECT cSubj ;
TEXT cText ;
FROM USER ;
TO MailTo
ACTIVATE MAIL oMail
nRet := oMail:nRetCode
IF nRet = 0
MsgInfo( "Email Send", "Email Send" )
ENDIF
oMail:End()
RETURN NIL
// MAPLOOK.RC
Code: Select all
MEMO DIALOG 209, 93, 187, 200
STYLE DS_ABSALIGN | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Enviar email "
FONT 8, "Arial"
{
EDITTEXT 302, 0, 20, 187, 12
EDITTEXT 303, 0, 50, 187, 12
EDITTEXT 304, 3, 80, 180, 96, ES_MULTILINE | ES_WANTRETURN | WS_BORDER | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "&Criar eMail", 111, 32, 179, 70, 16, BS_LEFTTEXT | WS_TABSTOP
PUSHBUTTON "&Saida", 112, 104, 179, 50, 16, BS_LEFTTEXT | WS_TABSTOP
LTEXT "Assunto(Subject):", 401, 0, 6, 184, 12, NOT WS_GROUP
LTEXT "Para(To):", 402, 0, 36, 184, 12, NOT WS_GROUP
LTEXT "Corpo do Email - Email body", 403, 0, 66, 180, 12, NOT WS_GROUP
}
Regards, saludos.
Re: Mapi Outlook .. send mail silently
Posted: Fri Dec 13, 2019 4:49 pm
by TimStone
karinha,
We have no problem with creating emails for MAPI, as your example does.
The problem is that each time you send a MAPI mail, it pops up the email in the client ( Outlook ) and does not send it until you hit the send button.
In my case, I have the system send automatic emails in the middle of the night. These include thank you notes and service reminders. Currently I have to use SMTP for this process, but we would love to have it go through the MAPI client so both the outgoing, and any incoming, emails can be tracked along side all other emails the business may send.
We need to write the email from our application directly to the Outlook outbox where the system will automatically send it when it does it's send/receive cycle. So far we have not found a workable solution for this.
Tim
Re: Mapi Outlook .. send mail silently
Posted: Fri Dec 13, 2019 5:13 pm
by karinha
Master Tim, in this case, I use the easy to control RMAIL.PRG for mass emailing.
http://forums.fivetechsupport.com/viewt ... il#p219619
Regards.
Re: Mapi Outlook .. send mail silently
Posted: Fri Dec 13, 2019 6:44 pm
by TimStone
In my program, the emails are not "mass", just daily followups. They are sent automatically in the middle of the night.
It works to use SMTP, but then we don't have them in Outlook. Also most of my clients have no idea how to setup SMTP, so that is an issue.
Apparently the API for Outlook does not include a direct method. Most solutions described on the net do have a method for dropping the email in the Outbox, but I have to figure out a translation for that from the old VB code, or C# code, that these folks are calling.
Tim
Re: Mapi Outlook .. send mail silently
Posted: Sat Dec 14, 2019 8:20 am
by Jimmy
hi,
sorry to ask again : is your Snapshot Outlook or not
my 1st Msg was about Outlook "Send Mail Form" which is called with Outlook Method Display()
---
what is in your HB_ISLOG( 7 ) when call MAIL
c:\fwh\source\winapi\mapi.c
Code: Select all
HB_FUNC( MAPISENDMAIL )
...
lpfnMAPISendMail = ( LPMAPISENDMAIL ) GetProcAddress( hMapiLib, "MAPISendMail");
// this line
nFlags = IF( ( HB_ISLOG( 7 ) && hb_parl( 7 ) ), MAPI_DIALOG, 0 ) ;
i guess
is .T. so
if nFlags = 0 you will get no Dialog
Re: Mapi Outlook .. send mail silently
Posted: Fri Dec 20, 2019 9:24 am
by Jack
Hi ,
I think i have the solution , if you place the instruction oMailItem:Invoke("Send") , it is in silent mode .
Good luk and marry Christmas .
Philippe
#include "fivewin.ch"
function main()
local oOutLook,oMailItem
oOutLook := TOleAuto():New("Outlook.Application")
oMailItem := oOutLook:Invoke("CreateItem", 0)
oMailitem:to:="
ph.jacquet@skynet.be"
oMailItem:Recipients:Add("
jacquetlg@yahoo.fr")
oMailitem:CC:= "
jclip@skynet.be"
oMailItem:Subject := "Sujet de mail en direct"
oMailItem:Body := "Le texte principal"
*if ! empty(cPdf)
* oMailItem:Attachments:Add(cPdf)
*endif
oMailItem:display(.F.)
oMailItem:Invoke("Send")
sysrefresh()
*
return .T.
Re: Mapi Outlook .. send mail silently
Posted: Fri Dec 20, 2019 7:02 pm
by Rick Lipkin
Phillippe
Your code works well except .. the e-mail goes to the Outlook Outbox and it is never sent ..
Definitly on the right track ... any suggestions ?
Rick Lipkin
Code: Select all
#Include "FiveWin.ch"
//----------------------------
Func Main()
Local cSubject,cTo,cOther,cBody
Local oOutlook,oMailItem,cCC
cTo := "dbrown@doi.sc.gov"
cOther := "mmills@doi.sc.gov"
cCC := "twatson@doi.sc.gov"
cSubject := "Test Silent Email"
cBody := "This is the body of the e-mail"
oOutLook := TOleAuto():New("Outlook.Application")
oMailItem := oOutLook:Invoke("CreateItem", 0)
oMailitem:to := cTo
oMailItem:Recipients:Add( cOther )
oMailitem:CC:= cCC
oMailItem:Subject := cSubject
oMailItem:Body := cBody
*if ! empty(cPdf)
* oMailItem:Attachments:Add(cPdf)
*endif
oMailItem:display(.F.)
oMailItem:Invoke("Send")
sysrefresh()
msginfo( "E-mail Sent" )
return .T.
Re: Mapi Outlook .. send mail silently
Posted: Fri Dec 20, 2019 8:16 pm
by Jimmy
Rick Lipkin wrote:
Your code works well except .. the e-mail goes to the Outlook Outbox and it is never sent ..
Code: Select all
oMailItem:display(.F.)
oMailItem:Invoke("Send")
even it you do not o:display(.F.) it will never "send" ... it goes to Out-Basket.
the only Way to "send" it "automatic" by Outlook.
there was a Trick to reduce Time between "automatic" but i did not found it (yet)
Re: Mapi Outlook .. send mail silently
Posted: Fri Dec 20, 2019 8:47 pm
by Rick Lipkin
To All
As it turns out the code actually works .. I learned that Outlook where I work is blocked .. I tested that with my Outlook client on my laptop .. and when I sent an e-mail with the full version of Outlook .. the message behaved the same way and got stuck in the outbox ..
This is perfect .. Thanks Philippe!!
Rick Lipkin