Senin, 25 Maret 2013

RE: [MS_AccessPros] Sending Mail

 

Yes. The actual records in ztblHTMLTemplates are:

Giorgio-

Yes, the actual records in ztblHTMLTemplates are:

Template TemplateSeq TemplateDesc TemplateHTML

Announcement 1 Heading "<HTML><HEAD><META
HTTP-EQUIV=""Content-Type""
CONTENT=""text/html;charset=windows-1252""><TITLE>Membership - Meeting
Announcement</TITLE></HEAD><BODY>
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 width=""664"" >
<TR HEIGHT=32 >
<TD WIDTH=94 ALIGN=LEFT ></TD><TD WIDTH=570 ALIGN=CENTER ><I><B><FONT
style=FONT-SIZE:20pt FACE=""Times New Roman"" COLOR=#000080>Meeting
Announcement for the<br>
Developers Group</FONT></B></I></TD></TR></TABLE><p><table border=0
cellpadding=0 cellspacing=0 width=""714""><tr><td width=""320""><B><FONT
style=FONT-SIZE:16pt FACE=""Times New Roman""
COLOR=#000080>[MeetingDate]</FONT></B></td><td width=""391""><FONT
style=FONT-SIZE:16pt FACE=""Times New Roman""
COLOR=#000080><i>[Committee]</i></FONT></td></tr></table>
<B><I><FONT style=FONT-SIZE:14pt FACE=""Times New Roman""
COLOR=#000080>[MeetingDescription]<br></FONT></I></B><FONT FACE=""Times New
Roman"" COLOR=#000000>[MeetingLocation]</FONT>
<br><br><font face=""Times New Roman"" color=""#000080""><b><font
size=""4""><a name=""Top"">Topics</a><br></font></b></font>"

Announcement 2 Topic Index line "<font face=""Times New
Roman""><a href=""#[TopicKey]"">[AnnounceTitle]</a></font><br>"

Announcement 3 Topic "<br><B><FONT style=FONT-SIZE:12pt
FACE=""Times New Roman"" COLOR=#000080><a
name=""[TopicKey]"">[AnnounceTitle]</a> </FONT></B>
<font face=""Times New Roman"" color=""navy"" size=""1""><a href=""#Top""
style=""color: blue"">(return top)</a><TABLE BORDER=0 CELLSPACING=0
CELLPADDING=0 ><TR HEIGHT=18 ><TD WIDTH=715 ALIGN=LEFT ><FONT
style=FONT-SIZE:12pt FACE=""Times New Roman""
COLOR=#000000>[AnnounceDescription]</FONT></TD></TR></TABLE>"

Announcement 4 Footer "</p></BODY></HTML>"

John Viescas, Author
Microsoft Access 2010 Inside Out
Microsoft Access 2007 Inside Out
Microsoft Access 2003 Inside Out
Building Microsoft Access Applications
SQL Queries for Mere Mortals
http://www.viescas.com/
(Paris, France)

From: MS_Access_Professionals@yahoogroups.com
[mailto:MS_Access_Professionals@yahoogroups.com] On Behalf Of
giorgio_rovelli
Sent: Monday, March 25, 2013 11:18 AM
To: MS_Access_Professionals@yahoogroups.com
Subject: Re: [MS_AccessPros] Sending Mail

 

Hi John, that's great as usual. Just a clarification: is your HTML
template named Announcement?

Also how do you change the message send code to set objMail.Body with
plain text instead?

Giorgio

--- In MS_Access_Professionals@yahoogroups.com, John Viescas <JohnV@...>
wrote:
>
> Youssef-
>
>
>
> I built a little routine to send email via Outlook that looks like:
>
>
>
>
----------------------------------------------------------\
----
>
> Option Compare Database
>
> Option Explicit
>
> Const olMailItem = 0
>
>
>
> Public Function SendOutlookMsg(strSubject As String, strTo As String,
_
>
> strHTML As String, Optional intUseBCC As Integer = 0) As Integer
>
> ' Function to send an email message using Outlook
>
> ' Inputs: Subject of the message
>
> ' List of valid "To" email addresses
>
> ' HTML for the body of the message
>
> ' Send using BCC flag (optional)
>
> ' Output: True if successful
>
> ' Note: This demo version only formats and displays a new
>
> ' message. Use ObjMail.Send instead of .Display
>
> ' to actually send the message
>
>
>
> Dim objOL As Object, objMail As Object
>
>
>
> ' Set an error trap
>
> On Error GoTo SendOutlookMsg_Err
>
>
>
> ' Get a pointer to Outlook - late binding
>
> Set objOL = CreateObject("Outlook.Application")
>
> ' Create a new email
>
> Set objMail = objOL.CreateItem(olMailItem)
>
> ' Set the subject
>
> objMail.Subject = strSubject
>
> ' Set To or BCC
>
> If intUseBCC = True Then
>
> objMail.BCC = strTo
>
> Else
>
> objMail.To = strTo
>
> End If
>
> ' Insert the HTML of the message
>
> objMail.HTMLBody = strHTML
>
> ' Send it
>
> objMail.Send
>
> ' Done - clear objects
>
> Set objMail = Nothing
>
> Set objOL = Nothing
>
> ' Return true
>
> SendOutlookMsg = True
>
>
>
> SendOutlookMsg_Exit:
>
> Exit Function
>
>
>
> SendOutlookMsg_Err:
>
> ' Log the error
>
> ErrorLog "SendOutlookMsg", Err, Error
>
> ' Bail
>
> Resume SendOutlookMsg_Exit
>
>
>
> End Function
>
> -------------------------------------------------
>
>
>
> Note that you do not need a reference to the Outlook library to run
this
> code because I'm using late binding and have declared the on constant
that I
> use.
>
>
>
> The trick is the code expects HTML for the body of your message. You
can
> write some additional code to open a Recordset on your data and build
the
> HTML. It is much easier to do if you build HTML templates first and
just do
> a Replace in your code.
>
>
>
> For example, I have a template to send meeting announcements that
consists
> of a header, index line, topic line, and footer. The four parts look
like
> this:
>
>
>
> Heading:
>
> <HTML>
>
> <HEAD>
>
> <META HTTP-EQUIV="Content-Type"
CONTENT="text/html;charset=windows-1252">
>
> <TITLE>Membership - Meeting Announcement</TITLE>
>
> </HEAD>
>
> <BODY>
>
>
>
> <p>
>
> <table border=0 cellpadding=0 cellspacing=0 width="714">
>
> <tr>
>
> <td width="320"><B><FONT style=FONT-SIZE:16pt FACE="Times New Roman"
> COLOR=#000080>[MeetingDate]</FONT></B></td>
>
> <td width="391"><FONT style=FONT-SIZE:16pt FACE="Times New Roman"
> COLOR=#000080>
>
> <i>[Committee]</i></FONT></td>
>
> </tr>
>
> </table>
>
> <B><I><FONT style=FONT-SIZE:14pt FACE="Times New Roman"
> COLOR=#000080>[MeetingDescription]<br>
>
> </FONT></I></B><FONT FACE="Times New Roman"
> COLOR=#000000>[MeetingLocation]</FONT>
>
> <br><br>
>
> <font face="Times New Roman" color="#000080"><b><font size="4"><a
> name="Top">Topics</a><br>
>
> </font></b></font>
>
>
>
> Index:
>
> <font face="Times New Roman"><a
> href="#[TopicKey]">[AnnounceTitle]</a></font><br>
>
>
>
> Topic:
>
> <br>
>
> <B><FONT style=FONT-SIZE:12pt FACE="Times New Roman" COLOR=#000080>
>
> <a name="[TopicKey]">[AnnounceTitle]</a> </FONT></B>
>
> <font face="Times New Roman" color="navy" size="1">
>
> <a href="#Top" style="color: blue">(return top)</a>
>
>
>
> Footer:
>
> </p>
>
>
>
> </BODY>
>
> </HTML>
>
>
>
> The following code grabs the data for a meeting announcement, builds a
"to"
> list from all members who are to attend the meeting, then bulds the
HTML
> using the above templates by reading in all the meeting topics and
using
> Replace to edit certain fields in the HTML before sending the fully
> constructed string to the email function.
>
>
>
>
----------------------------------------------------------\
----
> ---
>
> Private Function AnnouncementEmail() As Integer
>
> Dim db As DAO.Database, rstAnnounce As DAO.Recordset
>
> Dim rstTemplate As DAO.Recordset, rstData As DAO.Recordset
>
> Dim strTo As String, strTitle As String, strHTML As String
>
> Dim strWork As String, strBody As String, strTopics As String
>
> Dim strTopicIndexTemp As String, strTopicTemp As String, strFootTemp
As
> String
>
> Dim intTopicNo As Integer, datMtgDate As Date
>
>
>
> ' Set an error trap
>
> On Error GoTo AnnounceEmail_Err
>
>
>
> ' Point to this database
>
> Set db = DBEngine(0)(0)
>
>
>
> ' Open the query that the report uses
>
> ' -- filtered on the meeting selected
>
> Set rstAnnounce = db.OpenRecordset("SELECT * " & _
>
> "FROM qryRptMeetingAnnouncement WHERE MeetingID = " & Me.cmbMeeting)
>
> ' See if any records
>
> If rstAnnounce.RecordCount = 0 Then
>
> ' Tell the user
>
> MsgBox "The meeting you selected has no announcement or agenda
> records.", _
>
> vbInformation, gstrAppTitle
>
> ' Close out
>
> rstAnnounce.Close
>
> Set rstAnnounce = Nothing
>
> Set db = Nothing
>
> ' Bail
>
> Exit Function
>
> End If
>
>
>
> ' Get the list of members
>
> ' If a committee meeting,
>
> If Not IsNothing(rstAnnounce!CommitteeName) Then
>
> ' Get the list of members on this committee
>
> Set rstData = db.OpenRecordset( _
>
> "SELECT * FROM qryAnnounceEmailCommittee " & _
>
> "WHERE CommitteeName = '" & rstAnnounce!CommitteeName & _
>
> "' AND ((DateLeft Is Null) Or (DateLeft > #" & _
>
> rstAnnounce!MeetingDate & "#))")
>
> ' Make sure we have some
>
> If rstData.RecordCount = 0 Then
>
> ' Ask if they want to send to entire list or bail
>
> If vbYes = MsgBox("There are no members currently assigned " & _
>
> "to the " & rstAnnounce!CommitteeName & " Committee. Do you
> " & _
>
> "want to send an announcement to all members?", _
>
> vbQuestion + vbYesNo + vbDefaultButton2, gstrAppTitle) Then
>
> ' Close this one
>
> rstData.Close
>
> ' Open for all members
>
> Set rstData = db.OpenRecordset("qryAnnounceEmail")
>
> Else
>
> ' Close out
>
> rstData.Close
>
> Set rstData = Nothing
>
> rstAnnounce.Close
>
> Set rstAnnounce = Nothing
>
> Set db = Nothing
>
> ' Bail
>
> Exit Function
>
> End If
>
> End If
>
> Else
>
> ' Open a recordset on all active members
>
> Set rstData = db.OpenRecordset("qryAnnounceEmail")
>
> End If
>
>
>
> ' Build the "To" list
>
> Do Until rstData.EOF
>
> ' Add an email name
>
> strTo = strTo & rstData!FirstName & " " & _
>
> rstData!LastName & _
>
> "<" & rstData!Email & ">" & ";"
>
> ' Get the next record
>
> rstData.MoveNext
>
> Loop
>
> ' Close the recordset
>
> rstData.Close
>
> Set rstData = Nothing
>
>
>
> ' Open the HTML template for email
>
> Set rstTemplate = db.OpenRecordset( _
>
> "SELECT * FROM ztblHTMLTemplates " & _
>
> "WHERE Template = 'Announcement' " & _
>
> "ORDER By TemplateSeq")
>
> ' The first record has the header - copy it
>
> strHTML = rstTemplate!TemplateHTML
>
> ' Insert the date
>
> strHTML = Replace(strHTML, "[MeetingDate]", _
>
> Format(rstAnnounce!MeetingDate, "mmmm dd, yyyy h:nnampm"))
>
> ' Insert the Committee, if any
>
> strHTML = Replace(strHTML, "[Committee]", _
>
> Nz(("Committee: " + rstAnnounce!CommitteeName), ""))
>
> ' Add the meeting description
>
> strHTML = Replace(strHTML, "[MeetingDescription]", _
>
> rstAnnounce!MeetingDescription)
>
> ' Finally, do the location
>
> strHTML = Replace(strHTML, "[MeetingLocation]", _
>
> rstAnnounce!MeetingLocation)
>
> ' Save the meeting date
>
> datMtgDate = rstAnnounce!MeetingDate
>
>
>
> ' Load the rest of the template text
>
> rstTemplate.MoveNext
>
> ' Record 2 is the Topic Index Template
>
> strTopicIndexTemp = rstTemplate!TemplateHTML
>
> rstTemplate.MoveNext
>
> ' Record 3 is the Topic Detail Template
>
> strTopicTemp = rstTemplate!TemplateHTML
>
> rstTemplate.MoveNext
>
> ' Record 4 is the footer
>
> strFootTemp = rstTemplate!TemplateHTML
>
> ' Close the template recordset
>
> rstTemplate.Close
>
> Set rstTemplate = Nothing
>
>
>
> ' Now process all the topics, building indexes as we go
>
> Do Until rstAnnounce.EOF
>
> ' Build the index first - add 1 to counter
>
> intTopicNo = intTopicNo + 1
>
> ' Get the index template - insert the link key
>
> strWork = Replace(strTopicIndexTemp, "[TopicKey]", _
>
> "Topic" & intTopicNo)
>
> ' Insert the Topic Title
>
> strWork = Replace(strWork, "[AnnounceTitle]", _
>
> rstAnnounce!AnnounceTitle)
>
> ' Add it to the existing topics
>
> strTopics = strTopics & strWork
>
> ' Now, do the topic body - insert link key
>
> strWork = Replace(strTopicTemp, "[TopicKey]", _
>
> "Topic" & intTopicNo)
>
> ' Insert the Topic Title
>
> strWork = Replace(strWork, "[AnnounceTitle]", _
>
> rstAnnounce!AnnounceTitle)
>
> ' Insert the topic detailed description
>
> strWork = Replace(strWork, "[AnnounceDescription]", _
>
> rstAnnounce!AnnounceDescription)
>
> ' Add it to the existing topic body
>
> strBody = strBody & strWork
>
> ' Get the next record
>
> rstAnnounce.MoveNext
>
> Loop
>
> ' Close the recordset
>
> rstAnnounce.Close
>
> Set rstAnnounce = Nothing
>
> Set db = Nothing
>
>
>
> ' Got the pieces built, now assemble them
>
> strHTML = strHTML & strTopics & strBody & strFootTemp
>
>
>
> ' Send the email
>
> If Not (SendOutlookMsg("Meeting Notice - " & Format(datMtgDate, "Long
> Date") & _
>
> " Meeting Announcement", _
>
> strTo, strHTML, True)) Then
>
> ' Got failure - tell the user
>
> MsgBox "Sending meeting notice failed.", vbCritical, gstrAppTitle
>
> End If
>
> ' All worked - return success
>
> AnnouncementEmail = True
>
>
>
> AnnounceEmail_Exit:
>
> Exit Function
>
>
>
> AnnounceEmail_Err:
>
> ' Tell user about an error
>
> MsgBox "Unexpected error: " & Err & ", " & Error, _
>
> vbCritical, gstrAppTitle
>
> ' Bail
>
> Resume AnnounceEmail_Exit
>
> End Function
>
> --------------------------------------------------------
>
>
>
> I realize that's a lot to absorb to get the job done, but the result
will be
> quite nice. If you don't want to go to the trouble of building HTML
> (recommended for building tables containing data), you can change the
> message send code to set objMail.Body with plain text instead.
>
>
>
>
>
> John Viescas, Author
>
> Microsoft Access 2010 Inside Out
>
> Microsoft Access 2007 Inside Out
>
> Microsoft Access 2003 Inside Out
>
> Building Microsoft Access Applications
>
> SQL Queries for Mere Mortals
>
> http://www.viescas.com/
>
> (Paris, France)
>
>
>
>
>
>
>
> From: MS_Access_Professionals@yahoogroups.com
> [mailto:MS_Access_Professionals@yahoogroups.com] On Behalf Of Youssef
> Sent: Sunday, March 24, 2013 8:09 AM
> To: MS_Access_Professionals@yahoogroups.com
> Subject: [MS_AccessPros] Sending Mail
>
>
>
>
>
> Hi All,
>
> i can send the mail with attached report from Access 2007.
> but
> i want to know how to send the data NOT in an attached report but
INSIDE
> mail BODY itself.
>
> thanks in advance
>
>
>
>
>
> [Non-text portions of this message have been removed]
>

__._,_.___
Reply via web post Reply to sender Reply to group Start a New Topic Messages in this topic (5)
Recent Activity:
.

__,_._,___

Tidak ada komentar:

Posting Komentar