Good Evening Mike:
The email portion runs against a table of contacts with checkboxes to determine 
who gets what mail. I do a tomato mailing about 6 times a year that basically 
talks about my hose timer controlled drip fertigation system where the tomato 
plants are in 5 gallon spackle buckets.
The salmon fly mailing is sent to 240+ recipients in 9 countries every week 
(usually on Tuesday).
The email section uses CDO (collaborative data objects) wrapped around my gmail 
account primarily. But I have 3 other accounts that I can select in an 
optionbutton. On the form I have a listbox with a mover that enables me to drag 
and drop from either Windows Explorer or my Olympus photo editor that came with 
one of my cameras. All emails are sent as individual emails. The text section 
of the email is written in MS Word and dragged and dropped into the editbox. 
The document is saved as a as a Word doc and the email is saved to a VFP table 
with attachments and recipients. There is a resend function incase there is a 
Gmail issue to all or to selected individuals. I can refer to any email sent in 
the system and reuse any or all parts of it.
The email method mails 1/2 the recipient list then waits 20 minutes to mail the 
other half. I wait 5 seconds between emails. Google has locked my account when 
I sent all email as fast as it would go (depends on the size and number of 
attachments - usually jpgs of salmon and flies). So now the pacing function 
doesn't seem to be an issue with Google. They would lock the account for 
several hours when they 'thought' I was using their mailer as a spam engine. I 
guess some would think the fly mailing is spam! <bg> But the recipients all 
atlantic salmon/steelhead zealots like me!
Here is the send code:

LOCAL objCDOSYSMail, objCDOSYSCon, i, lbBlind_CC, lcSent_via
LOCAL lnTime_to_send, lnWait_time, lnStart_time, lnEnd_Time
lnWait_time = 5
IF NOT gbSpaces_stripped THEN
  thisform.edtNotes.Value = thisform.strip_spaces(thisform.edtNotes.Value)
  thisform.edtNotes.Refresh()
  gbSpaces_stripped = .t.
ENDIF
objCDOSYSMail = CreateObject("CDO.Message")
objCDOSYSCon =  CreateObject ("CDO.Configuration")
**********************************************************************************
DO CASE
  CASE thisform.cntShow_grid.optWhich_account.Value = 1  &&NJ Devils Email...
  CASE thisform.cntShow_grid.optWhich_account.Value = 2  &&Optonline Email...
  CASE thisform.cntShow_grid.optWhich_account.Value = 3  &&GMail Email - 
default account...
    
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername";)
 = "Your UserName"
    
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword";)
 = "Your PassWord"
    
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver";)
 = "smtp.gmail.com"
    
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing";) 
= 2
    
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport";)
 = 465
    
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate";)
 = 1
    
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl";)
 = 1
    
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout";)
 = 60
    objCDOSYSCon.Fields.update
    objCDOSYSMail.From = "Jack Skelley <[email protected]>"
    lcSent_via = CHR(13) + CHR(10) + "Sent Via Gmail..."
ENDCASE
**********************************************************************************
objCDOSYSMail.Configuration = objCDOSYSCon
objCDOSYSMail.ReplyTo = "Jack Skelley <[email protected]>"
objCDOSYSMail.Subject = ALLTRIM(thisform.txtSubject.Value)
objCDOSYSMail.TextBody = ALLTRIM(thisform.edtNotes.Value) + IIF(gbSent_via, 
lcSent_via, "")
********************************************************************************
IF thisform.lstAttachments.ListCount > 0 THEN
  FOR i = 1 TO thisform.lstAttachments.ListCount
    objCDOSYSMail.AddAttachment(ALLTRIM(thisform.lstAttachments.List(i, 2)) + 
ALLTRIM(thisform.lstAttachments.List(i, 1)))  &&path + filename
  ENDFOR
ELSE
  WAIT WINDOW "No Attachments Found..." TIMEOUT 1
ENDIF
**********************************************************************************
IF gbBlind_CC THEN
  objCDOSYSMail.BCC = "[email protected]"
  lbBlind_CC = .t.
ELSE
  lbBlind_CC = .f.
ENDIF
**********************************************************************************
thisform.cntEmail.Top = 217
thisform.cntEmail.Left = 160
thisform.cntEmail.lstEmail.Clear()
thisform.cntEmail.txtCurrent_time.Value = TIME()
thisform.cntEmail.txtCurrent_time.Refresh()
thisform.cntEmail.Visible = .t.
thisform.tmrTime.enabled = .t.
SELECT tView
GO TOP
thisform.cntEmail.txtStart.Value = TIME()
thisform.cntEmail.txtStart.Refresh()
thisform.cntEmail.txtEnd.Value = "Sending..."
thisform.cntEmail.txtEnd.Refresh()
DO CASE
  CASE gnSeq_num_email <= 0 &&this is for flymailing, tomato emails and 
multiple emails...
    IF gnResume_record > 0 THEN &&the error handler save the record that did 
not send and resume at that spot when Gmail thought this was a spam engine
      GO RECORD gnResume_record
      gnResume_record = 0
    ENDIF
    SCAN FOR flymailing REST  &&only send email to checked recipients...fly 
mailing, tomato mailing or multiple recipients...
      lnStart_time = SECONDS()
      WAIT WINDOW "Sending Email To: " + UPPER(ALLTRIM(tView.email)) + "..." 
NOWAIT
      objCDOSYSMail.To = ALLTRIM(tView.email)
      objCDOSYSMail.Send() &&send the email
      IF gbAbort_email_send THEN
        gnResume_record = RECNO('tView')
        RETURN
      ENDIF
      IF lbBlind_CC then
         lbBlind_CC = .f.  &&but keep the public version as it is as it is 
hooked to the checkbox...
         objCDOSYSMail.BCC = ""  &&only send 1 blind CC...
      ENDIF
      thisform.cntEmail.lstEmail.AddItem(ALLTRIM("Sent To: " + tView.lfname), 
thisform.cntEmail.lstEmail.ListCount + 1, 1)
      thisform.cntEmail.lstEmail.ListIndex = 
thisform.cntEmail.lstEmail.ListCount
      thisform.cntEmail.lstEmail.List(thisform.cntEmail.lstEmail.ListIndex, 2) 
= ALLTRIM(tView.email)
      gnEmails_sent = gnEmails_sent + 1
      thisform.cntEmail.txtEmails_sent.Refresh()
      thisform.cntEmail.lstEmail.ListIndex = 
thisform.cntEmail.lstEmail.ListCount
      lnEnd_Time = SECONDS()
      lnTime_to_send = lnEnd_time - lnStart_time
      thisform.cntEmail.txtTime_to_send.value = lnTime_to_send
      thisform.cntEmail.txtTime_to_send.refresh()
      WAIT WINDOW "Sent Email To: " + UPPER(ALLTRIM(tView.email)) + 
"...Waiting..." TIMEOUT lnWait_time
    ENDSCAN
  OTHERWISE     &&only for 1 email to be sent...
    lnStart_time = INT(SECONDS())
    WAIT WINDOW "Sending Email To: " + UPPER(ALLTRIM(tView.email)) + "..." 
NOWAIT
    objCDOSYSMail.To = ALLTRIM(tView.email)
    objCDOSYSMail.Send()
    IF gbAbort_email_send THEN
      gnResume_record = RECNO('tView')
      RETURN
    ENDIF
    IF lbBlind_CC then
       lbBlind_CC = .f.  &&but keep the public version as it is as it is hooked 
to the checkbox...
       objCDOSYSMail.BCC = ""  &&only send 1 blind CC...
    ENDIF
    thisform.cntEmail.lstEmail.AddItem(ALLTRIM("Sent To: " + tView.lfname), 
thisform.cntEmail.lstEmail.ListCount + 1, 1)
    thisform.cntEmail.lstEmail.ListIndex = thisform.cntEmail.lstEmail.ListCount
    thisform.cntEmail.lstEmail.List(thisform.cntEmail.lstEmail.ListIndex, 2) = 
ALLTRIM(tView.email)
    gnEmails_sent = gnEmails_sent + 1
    thisform.cntEmail.txtEmails_sent.Refresh()
    thisform.cntEmail.lstEmail.ListIndex = thisform.cntEmail.lstEmail.ListCount
    lnEnd_Time = INT(SECONDS())
    lnTime_to_send = lnEnd_time - lnStart_time
    thisform.cntEmail.txtTime_to_send.value = lnTime_to_send
    thisform.cntEmail.txtTime_to_send.refresh()
ENDCASE
thisform.cntEmail.txtEnd.Value = ""
thisform.cntEmail.txtEnd.Refresh()
thisform.cntEmail.txtEnd.Value = TIME()
thisform.cntEmail.txtEnd.Refresh()
thisform.Refresh()
WAIT CLEAR
DOEVENTS
objCDOSYSMail = null
objCDOSYSCon = null


This could be cleaned up but it works very well.
Happy to answer any other questions you may have.
Best regards,

Jack



Jack Skelley
Senior Director, Programming/Computer Operations
New Jersey Devils
(973)757-6164
[email protected] ________________________________________
From: [email protected] [[email protected]] on behalf of 
Michael Savage [[email protected]]
Sent: Monday, March 26, 2012 5:58 PM
To: [email protected]
Subject: Re: VFP9: Method Code Disappearing...

I read this with interest... How did you implement the email portion?

Also does anyone done SMS from inside VFP?

Mike

_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/profox
OT-free version of this list: http://leafe.com/mailman/listinfo/profoxtech
Searchable Archive: http://leafe.com/archives/search/profox
This message: 
http://leafe.com/archives/byMID/profox/7d9e7f72b813014c8fd022cf04f820ed13a...@ex08.drdad.thenewarkarena.com
** All postings, unless explicitly stated otherwise, are the opinions of the 
author, and do not constitute legal or medical advice. This statement is added 
to the messages for those lawyers who are too stupid to see the obvious.

Reply via email to