Korábban már posztoltam arról (itt és itt), miként lehet Excel-ből emailt küldeni Outlook-ban.
Most szintén emailt fogunk küldeni, azonban Gmail-en keresztül, mégpedig a CDO (Collaboration Data Objects) segítségével.
A CDO használatával tudjuk az email-es lehetőséget alkalmazni VBA-ban, illetve az email szolgáltató SMTP szerverét használni. Bővebben a CDO-ról itt.
Mielőtt futtatjuk a lenti makrót, két dolgot kell megtennünk:
1. hozzáadjuk a CDO-t a VBA szerkesztõben:
Tools -> References -> pipát betenni a “Microsoft CDO for Windows 2000 Library” elé, majd OK
2. Ez általában akkor kell, ha nincs két lépcsős azonosítás beállítva Gmail-ben:
Céges környezetben: ha szükséges, a lenti opció bekapcsolása előtt egyeztess az IT-vel.
az alábbi linken BEKAPCSOLNI a “Kevésbé biztonságos alkalmazások hozzáférése” opciót:
https://myaccount.google.com/security?pli=1#connectedapps
A linkre való kattintás után be kell jelentkeznünk a Gmail-es névvel + jelszóval, majd a “Biztonság” szekción belül a “Kevésbé biztonságos alkalmazások hozzáférése” rész alatti “Hozzáférés engedélyezése (nem javasolt)”-ra kattintani:
Végül a “Kevésbé biztonságos alkalmazások engedélyezése”-t kapcsoljuk be:
Ezt a kód lefutása után érdemes ismét kikapcsolni, ha eredetileg is úgy volt.
Ezt követően az alábbi makrót másoljuk be egy modulba és futtassuk le:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
Sub EmailKuldeseExcelbolGmailre() 'készítette Tulner Roland (xlmotyo.hu) 'Inspiráció (angol): _ https://www.launchexcel.com/sending-e-mails-from-gmail-and-outlook-using-excel-vba/#gmail 'email küldése Excelbõl: Gmail-es emailrõl tetszõleges emailre. Elsõ két lépést megcsinálni, mielõtt futtatod a makrót! '---------------------------------------------------------------------------------------------------------------------- 'LÉPÉSEK '1. VBA szerkesztõben: Tools -> References -> pipát betenni a "Microsoft CDO for Windows 2000 Library" elé, majd OK '[CDO ismertetõ az alábbi link bevezetõjében (angol): _ https://www.exceltrainingvideos.com/tag/using-cdo-to-send-email-automatically/] '2. Az alábbi linken BEKAPCSOLNI a "Kevésbé biztonságos alkalmazások hozzáférése" opciót Gmail-ben: _ https://myaccount.google.com/security?pli=1#connectedapps '3. ezen makró ("Sub SendGmail") futtatása '4. Az alábbi linken KIKAPCSOLNI a "Kevésbé biztonságos alkalmazások hozzáférése" opciót Gmail-ben: _ https://myaccount.google.com/security?pli=1#connectedapps '---------------------------------------------------------------------------------------------------------------------- If MsgBox( _ "Makró futtatása elõtt:" & vbNewLine & vbNewLine & _ "VBA szerkesztõben betetted a pipát a 'Microsoft CDO for Windows 2000 Library' elé?" & vbNewLine & _ "+" & vbNewLine & _ "Bekapcsoltad a 'Kevésbé biztonságos alkalmazások hozzáférése' opciót Gmail-ben?", vbYesNo + vbQuestion + _ vbDefaultButton2, "Figyelmeztetés") = vbNo Then Exit Sub 'CDO objektum létrehozása (korai kötés) Dim Mail As CDO.Message, fromGmailCim As String, toEmailCim As String, Jelszo As String Set Mail = New CDO.Message 'SSL hitelesítés engedélyezése Mail.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True 'az SMTP hitelesítés engedélyezése (érték "TRUE"-ra vagyis 1-re állítása) Mail.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 'az SMTP szerver és a port adatok beállítása 'ezeket a részleteket az adott Gmail fiók Beállítások oldalán lehet megkapni ("Átirányítás és POP/IMAP" fülön) Mail.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _ "smtp.gmail.com" Mail.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 Mail.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 'Gmail fiók belépési adatainak megadása fromGmailCim = Application.InputBox("Add meg a Gmail-es címed, ahonnan a levelet küldöd!", , "XXX@gmail.com", , , , , 2) Jelszo = Application.InputBox("Add meg a jelszót a " & fromGmailCim & " -hoz!", "", , , , , , 2) toEmailCim = Application.InputBox("Add meg a cél email címet, mely nem csak Gmail-es lehet!", , "XXX@YYY.com", , , , , 2) Mail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = fromGmailCim Mail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = Jelszo 'Konfigurációs mezõk frissítése Mail.Configuration.Fields.Update 'Email opciók beállítása With Mail .Subject = "Gmail-es email küldés_teszt_05" .From = fromGmailCim .To = toEmailCim '.CC = "user2@gmail.com" '.BCC = "user3@blabla.com" .TextBody = "Teszt email szövege" '.AddAttachment ("Fájl teljes elérési útjának megadása") 'csatolmány; frissíteni a fájl elérési útját End With 'email küldése On Error GoTo Vege Mail.Send MsgBox "Email sikeresen elküldve a(z) " & fromGmailCim & " -ról a(z) " & toEmailCim & " -ra.", vbInformation, "Gratulálok!" On Error GoTo 0 Exit Sub Vege: MsgBox _ "Hiba lehetséges okai:" & vbNewLine & vbNewLine & _ "1. Nem megfelelõ Gmail-es email cím (ahonnan küldöd a levelet). Minta: XXXXXXXXXX@gmail.com" & vbNewLine & vbNewLine & _ "2. Gmail-es emailhez tartozó jelszó téves." & vbNewLine & vbNewLine & _ "3. Cél email cím nem létezik." & vbNewLine & vbNewLine & _ "4. Bekapcsoltad a 'Kevésbé biztonságos alkalmazások hozzáférése' opciót Gmail-ben itt?" & vbNewLine & vbNewLine & _ "https://myaccount.google.com/security?pli=1#connectedapps" & vbNewLine & vbNewLine & _ "Ha nem, kapcsold be ás futtasd a makrót újra. A link a makróból is kimásolható, pl. a 'LÉPÉSEK' szekció 2. pontjából." _ , vbCritical, "Hiba" End Sub |
Az email címeket és a jelszót nekünk kell begépelni (a kód futása közben), így a makró nem tartalmaz semmilyen személyes adatot.
A küldő email címnek mindenképpen Gmail-esnek kell lennie, a címzett lehet nem Gmail-es email cím is. Én a teszt során a Gmail-es emailről küldtem levelet az info@xlmotyo.hu-ra.
Eredmény a küldő (Gmail-es) fiókból:
Eredmény a címzett email fiókból:
Vagyis a makróval elküldött email megjelenik a küldő fiók elküldött mappájában és a címzett fiók Beérkezett mappájában. Azért emelem ezt ki, mert az elküldött mappában nem minden automazitált levélküldésnél jelenik meg az email.
Ha a makró hibára fut, annak több oka is lehet:
1. nincs hozzáadva a CDO a VBA szerkesztőben (poszt elején: 1-es pont). Ekkor ezt a hibaüzenetet kapjuk:
Ezt a hibát nem tudja kezelni a VBA “On Error GoTo” utasítása, a megoldás a kód korairól késői kötésre való átírása lenne.
2. Nem megfelelõ Gmail-es email cím (ahonnan küldjük a levelet)
3. Gmail-es emailhez tartozó jelszó téves.
4. Cél email cím nem létezik.
5. Nem lett bekapcsolva a ‘Kevésbé biztonságos alkalmazások hozzáférése’ opció Gmail-ben (poszt elején: 2-es pont)
Jó tudni, ha tömeges email küldést szeretnénk a fenti kóddal megvalósítani:
- a Gmail napi 2000 email küldését engedélyezi (link)
- a makróban ezt a sort tegyük megjegyzésbe, hogy minden egyes automatikus email elküldésénél ne kelljen OK-t nyomni:
1 |
MsgBox "Email sikeresen elküldve a(z) " & fromGmailCim & " -ról a(z) " & toEmailCim & " -ra.", vbInformation, "Gratulálok!" |
A témában elmélyülni vágyóknak::
https://www.launchexcel.com/sending-e-mails-from-gmail-and-outlook-using-excel-vba/#gmail
https://www.rondebruin.nl/win/s1/cdo.htm
https://wellsr.com/vba/2020/excel/vba-send-email-with-gmail/
További szép napot és jó egészséget mindenkinek!