Clicking on a Link in Outlook 2013 using VBScript - vbscript

I wanted to click on a Link in my email body using VBScript? is this possible...
the email is in my Drafts folder. So far i have been able to navigate to my drafts folder.
olFolderDrafts = 16
Set objOutlook = CreateObject("Outlook.Application")
Set objNameSpace = objOutlook.GetNamespace("MAPI")
Set objDrafts = objNamespace.GetDefaultFolder(olFolderDrafts)
MsgBox objDrafts.Items.Count

Use a for each loop to enumerate the items of your objDrafts, store the HTMLBody from the item to a variable and extract the link with a regular expression from that varable.
Clicking on it won't work since it's no GUI but you can open the link with something like this CreateObject("WScript.Shell").Run("http://www.google.com")

Related

How to automate outlook when there is more than one account configured?

In my microsoft outlook...I have more than one account configured.. When I try to automate the customised mailbox(account). It always points to the default inbox... How to change this to the customised inbox I want?
We tried to use the below code:
But always it points to the mailbox XXXXX#medtronic.com and Inbox folder (The 2nd mailbox)
But we need to point to the Inbox of the RS mailbox and search for the email through VBscript as highlighted below in yellow colour.
enter code here
Set objApp = CreateObject("Outlook.Application")`enter code here`
Set objNameSpace = objApp.GetNamespace("MAPI")
Set objSyncs = objNameSpace.SyncObjects
Set myFolder = objNameSpace.GetDefaultFolder(6)
Set ObjMails = myFolder.Items
Set objFilter = ObjMails[![enter image description here][1]][1]
What points to the default mailbox? Namespace.GetDefaultFolder? You really need to provide the relevant snippets of your code.
If you want to work with a delegate folder, use either Namespace.GetSharedDefaultFolder, or, if the store is already opened in the active profile, retrieve the Store object from Namespace.Stores collection and use Store.GetDefaultFolder.

Include signature in VBA created email Outlook 2013

Here's what I've got. It works to create a message with HTML format, but I want it to include my signature and I'm not sure how to do that. I looked at some other answers and their solutions don't seem to work for Outlook 2013.
Sub CreateHTMLMail()
'Creates a new email item and modifies its properties.
Dim objMail As MailItem
'Create mail item
Set objMail = Application.CreateItem(olMailItem)
With objMail
'Set body format to HTML
.BodyFormat = olFormatHTML
.HTMLBody = "test"
.Display
End With
End Sub
There is no signature-specific property in the Outlook object model. You can detect the existing signature (if any) by reading the existing set of signatures (if any) in the following folders, so if you create a signature in Outlook it will save three files (HTM, TXT and RTF):
Vista and Windows 7/8/8.1/10:
C:\Users\<UserName>\AppData\Roaming\Microsoft\Signatures
Windows XP :
C:\Documents and Settings\<UserName>\Application Data\Microsoft\Signatures
Application Data and AppData are hidden folders, change the view in Windows explorer so it shows hidden files and folders if you want to see the files.
Outlook adds the signature to the new unmodified messages (you should not modify the body prior to that) when you call MailItem.Display (which causes the message to be displayed on the screen) or when you access the MailItem.GetInspector property - you do not have to do anything with the returned Inspector object, but Outlook will populate the message body with the signature.
Once the signature is added, read the HTMLBody property and merge it with the HTML string that you are trying to set. Note that you cannot simply concatenate two HTML strings - the strings need to be merged. E.g. if you want to insert your string at the top of the HTML body, look for the <body substring, then find the next occurrence of > (this takes care of the <body> element with attributes), then insert your HTML string after that >.

Automate 5 Firefox Tab

I am looking to automate our reporting. We currently have 5 Tabs in Firefox that we refer to for reporting. Each Tab has a unique url that changes each morning. We then have to each morning update these URLs (from an excel speadsheet). I would like to automate this. I do have a few constraints on this though. I cannot open a new tab for each new url (so basically it needs to be a url replace in each tab). I have looked into selenium but cannot get it to work
http://www.makeuseof.com/tag/using-vba-to-automate-internet-explorer-sessions-from-an-excel-spreadsheet/
and
http://www.makeuseof.com/tag/how-to-automate-firefox-or-chrome-with-vba-and-selenium/
So I was wondering if it could be done another way either using pure VBA or a batch file?
You need to add a reference to Microsoft Internet Controls and Microsoft Shell Controls and Automation. See screenshot below.
Code:
Sub Work_With_Open_IE_Instance()
Dim objShell As Shell
Dim objIE As InternetExplorer
Dim objWin As Object
Set objShell = New Shell
For Each objWin In objShell.Windows
If TypeName(objWin.Document) = "HTMLDocument" Then
Set objIE = objWin
'~~> This will display the URL of the IE which we will use to bind
Debug.Print objIE.LocationURL
'~~> Example to bind
'~~> Change URL to your existing URL
Select Case objIE.LocationURL
Case "https://www.google.com"
With objIE
.Refresh
'
'~~> Rest of the code
'
End With
Case "http://in.msn.com"
With objIE
.Refresh
'
'~~> Rest of the code
'
End With
End Select
End If
End If
Next objWin
End Sub
The Select Case is just for demonstration purpose. If you want to work with them one after the other then don't use Select Case. Use If/EndIf one after the other.

What causes Outlook 2007 to prompt "A program is trying to send an e-mail message on your behalf?"

I have a custom form built within Outlook that sends an email notification any time a change is made. Because of the specifications of the form, I had to add a bit of VBScript (unfortunately) to the form that does the emailing on the closing event of the form.
The form is currently published and works well. The only problem that appears to be cropping up is that I am the only one of the users that use the form that gets prompted with the following dialog:
Nobody else that uses the form is getting the dialog. This dialog box forces you to wait until the progress bar is complted before it "Allow"s you to send the email (about 5 seconds). Is it because I am the publisher? Or is it a client side setting that I am running into? How do I disable this puppy?
In case its relevant heres the source:
Sub SendAttach()
'Open mail, adress, attach report
Dim objOutlk 'Outlook
Dim objMail 'Email item
Dim strMsg
Const olMailItem = 0
'Create a new message
set objOutlk = createobject("Outlook.Application")
set objMail = objOutlk.createitem(olMailItem)
objMail.To = Item.UserProperties("Assigned To")
objMail.cc = Item.UserProperties("Bcc")
'Set up Subject Line
objMail.subject = "Work Order Notifications: " & Item.UserProperties("Work Order Number") & " - " & _
Item.UserProperties("Subject") & " Due " & Item.UserProperties("Due Date")
'Add the body
strMsg = Item.UserProperties("Specifications") & vbcrlf
strMsg = strMsg & Item.UserProperties("Constraints")
objMail.body = strMsg
objMail.display 'Use this to display before sending, otherwise call objMail.Send to send without reviewing
objMail.Send
'Clean up
set objMail = nothing
set objOutlk = nothing
End sub
Security here is not a concern. If somebody has managed to start sending emails from my workstation, I have much bigger problems than email spoofing!
As side note, I couldn't decide if SO or SU was the best place for this question. Please redirect accordingly if necessary.
I ran into this problem a while back whilst trying to accomplish somehting slightly different, but for this purpose is the same. The link HK has provided makes for good reading and helps to understand what's going on, however in the end I chose not to go with any of the options discussed on the page. Instead I kept it simple and decided to fool outlook into thinking I was sending the e-mail rather than an automated process, I did this by replacing the objMail.Send with a SendKeys alternate to mimic myself pressing the send button, bit ugly but worked in my case.
Edit:
You can use this sendkeys statement:
SendKeys "%{s}", 1
This basically calls Alt + S which triggers the outlook send button.
Three options
- Use a pc without the MS Outlook security patch
- Use the redemption ocx (google it up to download)
- Use SMTP instead of outlook
For the second option here an example
Function sendmail2 (sRecipient, sSubject, sMsg, sAttach)
on error resume next
dim SafeItem, oItem
set SafeItem = CreateObject("Redemption.SafeMailItem") 'Create an instance of Redemption.SafeMailItem
set oItem = oApp.CreateItem(0) 'Create a new message
With SafeItem
.Item = oItem 'set Item property
.Recipients.Add sRecipient
.Recipients.ResolveAll
.Subject = sSubject
.HTMLBody = sMsg
.Send
End With
End Function
I ran into the same problem and because my application runs on Windows 7 I was able to use Windows Mail Client (wlmail.exe) to send emails instead of MS Outlook. With Wlmail, the warning still comes in the default behavior but there is an option to turn off the warning by going to Options > Security tab and once you turn it off the program can send mails without bringing up a pop up.
Another possible workaround is to update the registry setting on your machine.
https://support.microsoft.com/en-gb/help/3189806/a-program-is-trying-to-send-an-e-mail-message-on-your-behalf-warning-i
This link outlines how to identify the relevant registry key and what value should be set. This allows you to override Trust Center settings.

Select a specific menu item from a Windows context (right-click) menu using VBScript?

Is there a way that I could automate the right-clicking of a file in a Windows 7 folder and select the, "Send To -> Amazon Cloud Drive" context menu option in a simple VB script?
The answer is yes and no. There is no direct way of doing this. You could create a workaround but it would be very involved.
The "proper" approach is to use the ShellFolderItem object's InvokeVerb method. It looks like this:
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace("C:")
Set objFile = objFolder.ParseName("test.vbs")
' Execute context menu item
'objFile.InvokeVerb("&Copy")
' List all possible verbs
Set colFolderItemVerbs = objFile.Verbs
For Each objFolderItemVerb in colFolderItemVerbs
WScript.Echo Chr(34) & objFolderItemVerb.Name & Chr(34)
Next
The problem is that submenu items are listed as empty strings.
As one possible workaround is to navigate to the Send To folder and grab the command line for the shortcut you want to use. You could then implement it directly.

Resources