Everyone I am using vb6 to send out emails. I have come across a situation where i need to send it Secured via Jmail.
How do i send a SSL email in Jmail?
Here is my current code, I need it to work with SSL as well.
Set objEmail = CreateObject("JMail.Message")
With objEmail
.From = gcFromAddress
.FromName = gcFromAddress
.AddRecipient cEmailAddress
.Subject = "" & mrsReportData("SubdivisionName").Value
End With
objEmail.Send (gcSMTPServerAddress & ":" & gcSMTPServerPort)
Use .net for that is very easy
First create dll proyect in .net example here (http://jumbloid.blogspot.com/2009/12/making-net-dll-com-visible.html)
second use it in vb6
Don't know what JMail is, however, here's code for sending mail per SSL from VB:
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=71899&lngWId=1
A quick check of the code however has shown it is quite buggy. Maybe however it is a good hint how to implement.
Related
Similar problem to "Resca's" Utility to send email to Gmail stopped working after google implemented OAuth. I have an excel workbook using VBA to ONLY SEND individual gmails to multiple “google group” members. It had been working for 4 years until Gmail added Oauth.
I have done tests with OAuth code from "Email Architect". I can test the app in test mode and it will send the email if I click passed the alarms and add include read. Compose, send and delete permissions. When I configure it as production I get not verified message and go through a similar routine that "test" needed. When I try to verify the Gmail API it requires a domain which I don't have. This is run under a single user xxx#gmail with owner permission from my disk. After seeing Resca's post, I think I may be over doing the OAuth.
I am not a programmer, but have vintage experience with assembler, macro and micro code, but not high level languages. Self taught VBA/Excel
I got parts of this code from "Jean-François Corbett" # https://stackoverflow.com Tonyyy at MRexcel.com
Set CDO_Mail = CreateObject("CDO.Message")
On Error GoTo Error_Handling
Set CDO_Config = CreateObject("CDO.Configuration")
CDO_Config.Load -1
Set SMTP_Config = CDO_Config.Fields
With SMTP_Config
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "xxxxx#gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xxxx"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
'25 & 465 are valid ports and sometimes may fail. Change to the other if you can't connect
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Update
End With
With CDO_Mail
Set .Configuration = CDO_Config
End With
CDO_Mail.Subject = strSubject
CDO_Mail.From = strFrom
CDO_Mail.To = strTo
CDO_Mail.TextBody = strBody
CDO_Mail.CC = strCc
CDO_Mail.BCC = strBcc
CDO_Mail.Send
To be clear Google did not add Oauth2. The option of using Xoauth2 with the smtp server has always been there. Nor is google forcing you to use Xoauth2 with the smtp server.
What google did was remove the option for Less secure apps & your Google Account. Which allowed you to use the google account password to connect to the smtp server.
If you have 2fa enabled on the google account you can create an apps password and use that password instead of the actual password for the google account in your code.
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "AppsPassword"
If you do not want to use an apps password then yes you will need to configure Xoauth2. xoauth2-protocol Its been a very long time since i have touched VBA I dont think this is something i can help with. But a quick google search shows it should be supported Oauth
I have a typical “CDO gmail Email send” macro. It has worked reliably for a couple of years now.
I use a spare gmail account as the address it uses to send from. I want to share the macro with some people. So I will use a different gmail address as the sender.
I have some other spare gmail accounts and also some of the people have registered an account and given me the Username and Password to add to the macro as the sending address.
I have 10 accounts, seven of mine and three registered by others. All work in normal manual use. Three work with the macro, seven don’t.
As far as I can tell. all have identical settings. This includes the unsafe setting of On for “Less secure app access”.
The accounts have been registered at different times over the last two years.
One of the accounts that does not work was registered recently by someone having no previous accounts. One of the accounts that does work has been used almost daily for two years both manually and with the macro.
Two accounts were registered at the same time by two people in my family. They have been used normally/ manually to approximately the same extent for two years, but not previously with my macro. One account works in the macro, the other doesn’t.
These facts suggest to me that the non working accounts have not been blocked for suspected spamming. It seems random which accounts work and which don’t.
Below is a simplified version of the macro. (I can mostly use 465 or 25 as the smtpserverport. The results are almost always identical with either. Only very rarely, one will work whilst the other doesn’t. This seems to depend on the location from which the attempt is made).
The results I get are fairly consistent, including using the macro from different locations and different IP addresses.
I occasionally get security warnings for all accounts when I use the accounts from new locations but I always confirm that “it was me”. After taking this action, I never get security warnings again when using the account at that location. Immediately after such a warning, the account is temporarily blocked but the block is removed after I confirm “it was me”.
Three of the addresses almost always work with the macro. On the rare occasions that they don’t work, a second attempt is usually successful. (Those working addresses have been registered by me sometime in the last two years.)
Seven of the addresses never work with the macro. The error message at the .Send point is always the same:
-2147220975:
Die Nachricht konnte nicht an den SMTP-Server gesendet werden. Der Transportfehlercode lautet 0x80040217. Die Serverantwort lautet not available
An approximate English translation:
-2147220975:
The message could not be sent to the SMTP server. The transport error code is 0x80040217. The server response is not available
(To run the macro below, you must edit to give a real gmailAddress#gmail.com , a real gmailPassword , and real places to send the Email to at the .To and .cc)
Sub Run_gMail_Send_Simplified() ' Run this macro with a valid gmailAddress#gmail.com and gmailPassword and real places to send the Email to at the .To and .cc place
Call gMail_Send_Simplified("gmailAddress#gmail.com ", "gmailPassword")
End Sub
Sub gMail_Send_Simplified(ByVal UsrNme As String, ByVal PsWd As String) '
With CreateObject("CDO.Message") ' ' -------------------* with LCDCW Library ( Linking Configuration Data Cods Wollups) which are used and items configured for the Exchange at Microsoft's protocol therof
Dim LCD_CW As String: Let LCD_CW = "http://schemas.microsoft.com/cdo/configuration/"
.Configuration(LCD_CW & "smtpusessl") = True '
.Configuration(LCD_CW & "smtpauthenticate") = 1
' ' Sever info
.Configuration(LCD_CW & "smtpserver") = "smtp.gmail.com" '
' The mechanism to use to send messages.
.Configuration(LCD_CW & "sendusing") = 2
.Configuration(LCD_CW & "smtpserverport") = 25 ' or 465
.Configuration(LCD_CW & "sendusername") = UsrNme '
.Configuration(LCD_CW & "sendpassword") = PsWd
' Optional - How long to try ( End remote SMTP server configuration section )
.Configuration(LCD_CW & "smtpconnectiontimeout") = 30 '
' Intraction protocol is Set/ Updated
.Configuration.Fields.Update '
'End With ' -------------------* End with LCDCW Library ( Linking Configuration Data Cods Wollups) which are used and items configured for the Exchange at Microsoft's protocol therof
' Data to be sent
.To = "mrlotus123#somemail.com"
.cc = "billandben#someuveremail.com"
.BCC = ""
.from = """gMail_Send_Simplified"" <""" & UsrNme & """>"
.Subject = "Hello from " & UsrNme & " using gMail_Send_Simplified" '
.TextBody = "Hi" & vbNewLine & vbNewLine & "Testing. Please ignore this EMail"
' Do it
On Error GoTo Bed ' Intended to catch a possible predicted error in the next line when running the routine
.send
On Error GoTo 0
Debug.Print "Done " & Format(Now(), "hh mm") & " with Username: " & UsrNme & vbCr & vbLf
End With ' End With CreateObject("CDO.Message") (Rem 1 Library End =======#
Exit Sub
Bed:
Debug.Print "Fail " & Format(Now(), "hh mm") & " with Username: " & UsrNme & vbCr & vbLf & " " & Err.Number & ": " & Err.Description & vbCr & vbLf
End Sub
Any suggestions other than registering accounts and picking out the ones that work?
Is there some setting I may have missed?
Question also posted here:
https://support.google.com/mail/thread/17437986?hl=en&authuser=5
I have the problem solved so I am sharing the solution.
I have now improved the situation from 3 out of 10 accounts working to 11 out of 11 accounts working.
Here are the solution details for anyone else that has a similar problem. I would recommend starting with the solution _4) , as that is the quickest. If that does not solve the problem you will need to look at the others. The others may involve some laborious work.
_1 A strange thing in an old account, which was recently not working in my program and which I had definitely checked many times for Less Secure Apps On.
This account still had in the InBox many old typical Email Warnings from when I had attempted to do things such as logging in different places. ( Often this causes a temporary block, or resetting of Less Secure Apps Off , until you confirm something like “yes, that was me” ). All had been answered by me with “yes it was me”, at least I am 98% sure about that –they all been read, so it is very unlikely that I had ignored them
Never the less , I laboriously re read the Email warnings, and followed the link which almost always confirmed that I had answered, and any given link to the setting showed that it was indeed set to On.
There was one exception : the link showed that the Setting was off. Still looking at any other link or looking in that account settings showed it to be On. But I switched it on anyway, after which the account worked again in my program.
I note that all links in warnings are unique, as they contain information specific to the occurrence which sets off the warning. One explanation of the possible bug is that somehow an answer warning gets set back to unanswered, which blocks the account. The check for validation might be based for some reason on a dynamic process that has all the warnings in a chain, such that all must be answered with yes. This make sense since you can change your answer at a later date. The work around is to re answer all old warnings. In some old accounts I had trashed old Email warnings anymore, so I thought that I could not answer again answer, such that the account would remain blocked, despite showing that it isn’t. But strangely, in the trash folder all old warnings were there despite the default setting of only holding trash for 30 days… https://imgur.com/thNdDaV … very strange, in that screenshot there are entries going back to early 2018, despite the fact that it clearly states there that trash is deleted after 30 days. Other stuff that I trashed is gone.
In future , to be on the safe side, I will archive rather than delete warning Emails, or at least store the link given in it for checking and re setting Less Secure Apps.
_2 Setting suddenly showing (correctly) Off, allowing it to be set to On. Another old account, which was recently not working in my program and which I had definitely checked many times for Less Secure Apps On, suddenly showed Less Secure Apps Off. I then switched it On, and the account worked in my program. This may have been caused indirectly by some of the “cross wire” effects whilst I was looking at effects in other accounts. The moral of this one is not to rely on checking the setting just once, as later it might change for no apparent reason.
_ 3) I mentioned in the original post that my personal telephone cant be used any more to verify a new account, (gmail only allow a few uses for SMS confirmation – they deliberately do not say how many). Mostly that is still the case. On one random attempt during my experiments it worked. The new account then also worked in my program. – Hence I have 11 out of 11 now working, rather than 10 out of 10.
Similar conclusion again here: Don’t rely on the situation being static, some external thing may have some effect giving you a short period to do something that is generally not possible.
_4) Links going to wrong accounts. This mostly happens when I have other accounts open, but occasionally it also happens when I only have one account open.
As example: I get a valid warning based on some activity that I do on an account: https://imgur.com/VTAJOWc , I give it the OK, https://imgur.com/mKskkzx , and I then see a notice informing me that the Less Secure Apps has been set to Off, https://imgur.com/9bNePXf . So I follow the link for further info: https://imgur.com/LpGQYlj , and there after I follow a link to turn Less Secure Apps back on, https://imgur.com/WuMjPml . So far so good – note the account shown in the coloured ball top right is the correct one: https://imgur.com/yj09MsX
Now it gets interesting: I end up at the wrong account: https://imgur.com/T050wP4
That is easy to overlook. The solution here was to ignore links given and go directly to settings on the correct account, preferably soon after you get the warning. If you do not do that, then not only will you possibly not get to set the correct account, but also you possibly get another undesirable effect: sometimes the act of following the ( “crossed” ) link seemed to set off sporadic warnings and setting changes on other accounts !!!
This is all suggesting to me that there is some “cross wire type” bugs somewhere in Google.
_ 5 ) Rogue account getting other accounts warnings. This is related to _4) , but in particular one of my accounts not only got effected by following the “cross wired links” , but also frequently gets the warnings that should go to the other accounts. This happens even when I am not using that account anywhere. Once again this suggests some “cross wiring / leakage” caused by Google tracking what I , personally , am doing
_.______________
The short answer to what the problem was/is, is possibly that Less Safe App access was being blocked/ temporarily tuned Off, but for varied reasons it was not easy to switch it back On, since the obvious way to do that via settings was no use since it was often indicated as already On, and in some cases , just looking at it caused other account settings to change!!
I am slightly put off using gmail in my program. I have some concern that Google in its “spying” has got “cross wires / leakage” and it has grown into an uncontrollable monster that will probably break out of its server and appear in front of me and try kill me …… I actually registered the particular account discussed in _5) when I was away from home in India!!! ………… “…You are experiencing a car accident … The hell I am..” -- https://www.youtube.com/watch?v=L0Fw8TVYBKg
_.__________________-
I think we have all experienced at one time or another that adverts seem to pop up which obviously have got some “inside information” about us, which amongst other sources, may come from some Google “spying” on you . I use the word “spying” loosely – most likely we have agreed to it when agreeing to something without fully reading all the small print.
My recent experience is showing that I can follow links to change settings on one of my Google accounts, and then actually change settings on other accounts, even if I am not logged into these accounts. Further, I can change setting in one of my accounts, and it will cause changes in other accounts. I am not sure if that is supposed to happen. But it certainly does happen to me on some of my computers.
The common thing that is causing this cross wiring may be Google chrome browser. I should say finally that I am using a very old version often , in Vista. Possibly these issues do not arise if you only use a newer version..
Alan
I created a makro in excel to send all TODOs to the responsible people. Now I want to add the sender address into the CC. I know how to set the CC but I don't know how to get the current sender address.
Set session = CreateObject("Notes.NotesSession")
Set db = session.GETDATABASE("", "")
Call db.OPENMAIL
Set doc = db.CREATEDOCUMENT
Call doc.REPLACEITEMVALUE("CopyTo", strEmail)
I think it should work with the notes session, but I didn't find any method for this.
You can just use NotesSession.UserName(). This is Notes mail you are sending. You don't need a full SMTP-style address with the # and the DNS domain name. You can just put the user's Notes username in an addressing field and the Domino router will do the lookup and it will just work.
The above is true as long as (a) the server that you have established the session with is either the user's home mail server, a member of the same Notes domain (which is not the same thing as a DNS domain), or a member of a Notes domain that includes the user's Notes domain as part of its Directory Assistance (or its cascading address book list if it's using 20-year-old configurations), and (b) the username is unique within the above scope.
another suggestion, copy sender from last sent mail, to test
Set view = db.GetView("(($Sent))")
Set sentdoc = View.GetLastDocument
sender=sentdoc.getItemValue("From")
The way I automated Lotus Notes and sending emails was using this site below:
Send files using Lotus Notes
The area you want to pay attention to is at the bottom, which takes "noDocument" and adds the relevant titles "Subject", "to", "Sendto" etc.
'Add values to the created e-mail main properties.
With noDocument
.Form = "Memo"
.SendTo = vaRecipients
.CopyTo = vaCopyTo
.Subject = stSubject
.Body = vaMsg
.SaveMessageOnSend = True
.PostedDate = Now()
.Send 0, vaRecipients
End With
Use NotesSession.userName() to get the current username. If you really want the full email address you might also be able use #namelookup formula.
However, I would stay away from accessing notes via COM as it does not work on 64bit and IBM couldn't care less about it. I had several excel files which used this handy technique, but they are all broken since we moved to 64bit. Check this old kb https://www-304.ibm.com/support/docview.wss?uid=swg21454291
I have been using CDO from my access application successfully for some time. We are now moving to Office (and Outlook) 365. My CDO code now doesn't work and gives a transport error 80040217. I have read that this error has to do with username and password authentication. According to our server admin I have the right information.
I have seen conflicting articles as to whether or not CDO can be used with 365. I have also tried the different port numbers (25 seems to be the right one). I also have seen older articles saying the server should be a pod id like podxxxxx.outlook.com, but then other articles say that is old and to just use smtp.office365.com.
I have no idea how to get the pod information if that is what I need.
I have attached the code I am using, but I was wondering if anyone knows whether CDO really does or does not work with 365. If it does, is there some setting we may be missing on our server? Our admin has sent an email with this address through the command line, so it appears the userid is good, but he used Base 64 encoding for the username and password. I tried that but it didn't work either.
I have also tried using the MX endpoint for the smtpserver value like myaddress-com.mail.protection.outlook.com and I still get the error.
Any suggestions?
Dim cdoConfig As Object, objMessage As Object
Set cdoConfig = CreateObject("CDO.Configuration")
With cdoConfig.Fields
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")="smtp.office365.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport")=25
.Item("http://schemas.microsoft.com/cdo/configuration/username")="donotreply#myaddress.com"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword")="passwordhere"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate")= 1
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl")=True
.Update
End With
Set objMessage = CreateObject("CDO.Message")
Set objMessage.configuration = cdoConfig
objMessage.To = "someone#myaddress.com"
objMessage.FROM = "donotreply#myaddress.com"
objMessage.Subject = "test"
objMessage.textBody = "put the body here"
objMessage.Send
About a year ago, a manager in another department brainstormed that I could code up some VBA to auto call me in the event one of my automated reports crashes. I laughed at the time, but my skills have improved considerably and I wonder if it's technically possible
(not that I'd actually do it, mind you. I like my early Saturday mornings workplace-free).
This would need:
1. Access to the internet (not a problem)
2. A means of connecting to some service to place the call, preferably free, lest I cost the company $10 a month (Skype?)
3. An automated voice (already exists on the standard Access install package)
What do you think?
Edited 08/24/2009 - Spacing added. No text was changed.
Do the simplest thing that could possibly work. In this case, making phonecalls is hard, but sending emails is easy.
Most cellphone providers expose a phone's mailbox (something like 555-867-5309#cellphoneprovider.com) to the internet, allowing you to send an email to that address and have it show up on your phone as a text message.
You can use Skype in combination with VBA. It's actually not that complicated and you will find a couple of samples written in VBScript on the Skype website. I don't know whether it is possible to actually play an audio file, but you can send SMS easily:
'// Create a Skype4COM object:
Set oSkype = WScript.CreateObject("Skype4COM.Skype", "Skype_")
'// Start the Skype client:
If Not oSkype.Client.IsRunning Then oSkype.Client.Start() End If
'// Send SMS:
Set oSMS = oSkype.SendSms("+1234567890", "Hello!")
WScript.Sleep(60000)
'// Message event handler:
Public Sub Skype_SmsMessageStatusChanged(ByRef aSms, ByVal aStatus)
WScript.Echo ">Sms " & aSms.Id & " status " & aStatus & " " & oSkype.Convert.SmsMessageStatusToText(aStatus)
End Sub
'// Target event handler:
Public Sub Skype_SmsTargetStatusChanged(ByRef aTarget, ByVal aStatus)
WScript.Echo ">Sms " & aTarget.Message.Id & " target " & aTarget.Number & " status " & aStatus & " " & oSkype.Convert.SmsTargetStatusToText(aStatus)
End Sub
If you have a old dial up modem, then you could (in 'old VB6 days) dial via the modem programmatically, however I'm not sure if its possible in VBA. The next challange would be to get the audio down the line.
I would suggest that you butcher a headless earphone & microphone that connects to phones, you could then take a 3.5mm audio jack from your PC speaker output and connect this to the headless earphone/microphone set, unless there are cables that already do that (possibly).
Then it would be a simple matter of coding up Microsofts 'text to speech' engine.
Darknight
http://chandoo.org/wp/2009/02/05/twitter-from-excel/. Set up a twitter account that pings your phone and create twitters with this.
It's not as easy as the email idea, but you could be the first person to tweet from Excel for a reason other than novelty.
Another quite simple option is to send yourself a text message which is almost but not quite as easy to do as sending an email, but much easier to recieve. Companies such as clickatell.com provide cheap web based text services with good api's where once you are signed up all you need do is call a URL and you can send a text message.
Well worth a try.