Přejít k hlavnímu obsahu

Jak automaticky tisknout přílohy, když dorazí e-maily do Outlooku?

Tento kurz demonstruje metodu kombinace skriptu VBA a pravidla aplikace Outlook, která vám pomůže automaticky tisknout přílohy určitých e-mailů, když dorazí do aplikace Outlook.


Automaticky tisknout přílohy, když dorazí určité e-maily

Předpokládejme, že chcete automaticky tisknout přílohy příchozích e-mailů od určitého odesílatele. Chcete-li to provést, můžete postupovat následovně.

Krok 1: Vytvořte skript v aplikaci Outlook

Nejprve musíte vytvořit skript VBA v aplikaci Outlook.

1. Spusťte svůj Outlook a stiskněte Další + F11 současně otevřete Microsoft Visual Basic pro aplikace okno.

2. V Microsoft Visual Basic pro aplikace okno, dvakrát klikněte na Project1 > Objekty Microsoft Outlook > ThisOutlookSession k otevření ThisOutlookSession (kód) okno a potom zkopírujte následující kód do tohoto okna kódu.

Kód VBA 1: Automaticky tisknout přílohy (všechny typy příloh), když dorazí e-maily

Sub AttachementAutoPrint(Item As Outlook.MailItem)
'Updated by Extendoffice 20230223
  Dim xFS As FileSystemObject
  Dim xTempFolder As String
  Dim xAtt As Attachment
  Dim xShell As Object
  Dim xFolder As Object, xFolderItem As Object
  Dim xFileName As String
  On Error GoTo xError
  If Item.Attachments.Count = 0 Then Exit Sub
  Set xFS = New FileSystemObject
  xTempFolder = xFS.GetSpecialFolder(TemporaryFolder)
  xTempFolder = xTempFolder & "\ATMP" & Format(Item.ReceivedTime, "yyyymmddhhmmss")
  If Not xFS.FolderExists(xTempFolder) Then
    MkDir (xTempFolder)
  End If
  Set xShell = CreateObject("Shell.Application")
  Set xFolder = xShell.NameSpace(0)
  For Each xAtt In Item.Attachments
    If IsEmbeddedAttachment(xAtt) = False Then
      xFileName = xTempFolder & "\" & xAtt.FileName
      xAtt.SaveAsFile (xFileName)
      Set xFolderItem = xFolder.ParseName(xFileName)
      xFolderItem.InvokeVerbEx ("print")
    End If
  Next xAtt
  Set xFS = Nothing
  Set xFolder = Nothing
  Set xFolderItem = Nothing
  Set xShell = Nothing
xError:
  If Err <> 0 Then
    MsgBox Err.Number & " - " & Err.Description, , "Kutools for Outlook"
    Err.Clear
  End If
Exit Sub
End Sub

Function IsEmbeddedAttachment(Attach As Attachment)
Dim xItem As MailItem
Dim xCid As String
Dim xID As String
Dim xHtml As String
On Error Resume Next
IsEmbeddedAttachment = False
Set xItem = Attach.Parent
If xItem.BodyFormat <> olFormatHTML Then Exit Function
xCid = ""
xCid = Attach.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001F")
If xCid <> "" Then
    xHtml = xItem.HTMLBody
    xID = "cid:" & xCid
    If InStr(xHtml, xID) > 0 Then
        IsEmbeddedAttachment = True
    End If
End If
End Function

Poznámka: Tento kód podporuje tisk všech typů příloh přijatých v e-mailech. Pokud chcete vytisknout pouze určený typ přílohy, například soubory PDF, použijte následující kód VBA.

Kód VBA 2: Automaticky tisknout zadaný typ příloh, když dorazí e-maily

Sub AttachementAutoPrint(Item As Outlook.MailItem)
'Updated by Extendoffice 20230223
  Dim xFS As FileSystemObject
  Dim xTempFolder As String
  Dim xAtt As Attachment
  Dim xShell As Object
  Dim xFolder As Object, xFolderItem As Object
  Dim xFileType As String, xFileName As String
  On Error GoTo xError
  If Item.Attachments.Count = 0 Then Exit Sub
  Set xFS = New FileSystemObject
  xTempFolder = xFS.GetSpecialFolder(TemporaryFolder)
  xTempFolder = xTempFolder & "\ATMP" & Format(Item.ReceivedTime, "yyyymmddhhmmss")
  If Not xFS.FolderExists(xTempFolder) Then
    MkDir (xTempFolder)
  End If
  Set xShell = CreateObject("Shell.Application")
  Set xFolder = xShell.NameSpace(0)
  For Each xAtt In Item.Attachments
    If IsEmbeddedAttachment(xAtt) = False Then
      xFileName = xAtt.FileName
      xFileType = LCase$(Right$(xFileName, VBA.Len(xFileName) - VBA.InStrRev(xFileName, ".")))
      xFileName = xTempFolder & "\" & xFileName
      Select Case xFileType
        Case "pdf"   'change "pdf" to the file extension you want to print
          xAtt.SaveAsFile (xFileName)
          Set xFolderItem = xFolder.ParseName(xFileName)
          xFolderItem.InvokeVerbEx ("print")
      End Select
    End If
  Next xAtt
  Set xFS = Nothing
  Set xFolder = Nothing
  Set xFolderItem = Nothing
  Set xShell = Nothing
xError:
  If Err <> 0 Then
    MsgBox Err.Number & " - " & Err.Description, , "Kutools for Outlook"
    Err.Clear
  End If
  Exit Sub
End Sub

Function IsEmbeddedAttachment(Attach As Attachment)
Dim xItem As MailItem
Dim xCid As String
Dim xID As String
Dim xHtml As String
On Error Resume Next
IsEmbeddedAttachment = False
Set xItem = Attach.Parent
If xItem.BodyFormat <> olFormatHTML Then Exit Function
xCid = ""
xCid = Attach.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001F")
If xCid <> "" Then
    xHtml = xItem.HTMLBody
    xID = "cid:" & xCid
    If InStr(xHtml, xID) > 0 Then
        IsEmbeddedAttachment = True
    End If
End If
End Function

Poznámky:

1. Před použitím tohoto kódu VBA k tisku pouze souboru pdf v příchozích e-mailech je třeba nejprve stáhnout a nainstalovat Adobe Acrobat Reader a nastavte jej jako výchozí čtečku PDF v počítači.
2. V řadě Případ "pdf", prosím změňte "pdf" na příponu souboru, kterou chcete vytisknout.

3. Pokračujte a klikněte Tools > Reference. Při objevování Reference – Projekt1 V dialogovém okně zaškrtněte Microsoft Scripting Runtime a poté klikněte na OK .

4. Uložte kód a stiskněte Další + Q klávesy pro zavření Microsoft Visual Basic pro aplikace okno.

Poznámka: Ujistěte se prosím, že Povolit všechna makra ve vašem Outlooku je povolena možnost. Tuto možnost můžete zkontrolovat podle níže uvedených kroků.

Krok 2: Vytvořte pravidlo pro použití skriptu

Po přidání skriptu VBA do aplikace Outlook je třeba vytvořit pravidlo pro použití skriptu na základě určitých podmínek.

1. Přejděte na kartu Domů, klikněte na pravidla > Spravujte pravidla a upozornění.

2. V Pravidla a upozornění dialogové okno, klepněte na tlačítko Nové pravidlo tlačítko k vytvoření pravidla.

Tip: Pokud jste do aplikace Outlook přidali více e-mailových účtů, zadejte účet v Použít změny v této složce rozevíracího seznamu, kde chcete pravidlo použít. V opačném případě bude použito pro doručenou poštu aktuálně vybraného e-mailového účtu.

3. V první Průvodce pravidly dialogové okno vyberte Použijte pravidlo na zprávy, které dostávám v Krok 1 a potom klepněte na tlačítko OK Next.

4. Ve druhé Průvodce pravidly dialogové okno, musíte:

4.1) Zadejte jednu nebo více podmínek v Krok 1 krabice podle vašich potřeb;
V tomto případě chci tisknout pouze přílohy v příchozích e-mailech od zadaného odesílatele. Zde zkontroluji od lidí nebo veřejné skupiny box.
4.2) Klikněte na podtrženou hodnotu v Krok 2 pole pro úpravu podmínky;
4.3) Klepněte na tlačítko Next. Viz obrázek:

5. Ve třetím Průvodce pravidly dialogové okno, musíte nakonfigurovat následujícím způsobem.

5.1) V Krok 1: Vyberte sekci akcí, zkontrolovat spustit skript krabice;
5.2) V Krok 2 klikněte na podtržený text „skript“;
5.3) V otvoru Vyberte skript klepněte na název kódu VBA, který jste přidali výše, a potom klepněte na OK;
5.4) Klikněte na další knoflík. Viz screenshot:

Tip: Pokud jespustit skript“ ve vašem chybí Průvodce pravidly, můžete jej zobrazit pomocí metody uvedené v tomto článku: obnovit chybí Spustit skript pption v pravidle aplikace Outlook.

6. Pak další Průvodce pravidly objeví se žádostí o výjimky. V případě potřeby můžete vybrat výjimky, jinak klepněte na další tlačítko bez jakéhokoli výběru.

7. V posledním Průvodce pravidly, musíte zadat název pravidla a poté kliknout na úprava .

8. Poté se vrátí do Pravidla a upozornění V dialogovém okně můžete vidět pravidlo, které jste vytvořili, uvedené uvnitř, klikněte na OK dokončete celé nastavení.

Od této chvíle, když obdržíme e-mail od zadané osoby, budou přiložené soubory automaticky vytištěny.


Související články

Tiskněte pouze přílohy z jednoho e-mailu nebo vybraných e-mailů v aplikaci Outlook
V aplikaci Outlook můžete e-maily vytisknout, ale tiskli jste přílohy pouze z jednoho e-mailu nebo vybraných e-mailů v aplikaci Outlook? Tento článek představuje triky, jak tuto úlohu vyřešit.

Tisknout pouze záhlaví zprávy e-mailu v aplikaci Outlook
Při tisku e-mailu v aplikaci Outlook se v e-mailu vytiskne záhlaví zprávy i tělo zprávy. V některých speciálních případech však může stačit vytisknout záhlaví zprávy s předmětem, odesílatelem, příjemci atd. Tento článek představí dvě řešení, jak toho dosáhnout.

Tisk kalendáře v určeném/vlastním časovém období v aplikaci Outlook
Obvykle se při tisku kalendáře v zobrazení Měsíc v Outlooku automaticky vybere měsíc obsahující aktuálně vybrané datum. Možná však budete muset kalendář vytisknout v rámci vlastního rozsahu dat, jako jsou 3 měsíce, polovina roku atd. Tento článek vám představí řešení.

Tisk kontaktu s obrázkem v aplikaci Outlook
Při tisku kontaktu v aplikaci Outlook se obvykle obrázek kontaktu nevytiskne. Někdy však bude působivější vytisknout kontakt s jeho obrázkem. Tento článek představí některá alternativní řešení.

Vytiskněte výběr e-mailu v aplikaci Outlook
Pokud jste obdrželi e-mailovou zprávu a zjistili jste, že existuje výběr obsahu e-mailu, je třeba vytisknout místo vytištění celé zprávy, co byste udělali? Ve skutečnosti vám Outlook může pomoci dosáhnout této operace pomocí internetových prohlížečů, jako jsou Firefox a Internet Explorer. Zde si vezmu například internetové prohlížeče. Podívejte se prosím na následující výukové programy.

Další články o „tisku v aplikaci Outlook“...


Nejlepší nástroje pro produktivitu v kanceláři

Kutools pro aplikaci Outlook - Více než 100 výkonných funkcí, které doplní váš Outlook

???? Automatizace e-mailu: Mimo kancelář (k dispozici pro POP a IMAP)  /  Naplánujte odesílání e-mailů  /  Automatická kopie/skrytá kopie podle pravidel při odesílání e-mailu  /  Automatické přeposílání (pokročilá pravidla)   /  Automatické přidání pozdravu   /  Automaticky rozdělte e-maily pro více příjemců na jednotlivé zprávy ...

📨 Email management: Snadné vyvolání e-mailů  /  Blokujte podvodné e-maily podle předmětů a dalších  /  Odstranit duplicitní e-maily  /  pokročilé vyhledávání  /  Konsolidovat složky ...

📁 Přílohy ProDávkové uložení  /  Dávkové odpojení  /  Dávková komprese  /  Automaticky uložit   /  Automatické odpojení  /  Automatické komprimování ...

???? Rozhraní Magic: 😊 Více pěkných a skvělých emotikonů   /  Zvyšte produktivitu své aplikace Outlook pomocí zobrazení s kartami  /  Minimalizujte aplikaci Outlook namísto zavírání ...

???? Zázraky na jedno kliknutí: Odpovědět všem s příchozími přílohami  /   E-maily proti phishingu  /  🕘Zobrazit časové pásmo odesílatele ...

👩🏼‍🤝‍👩🏻 Kontakty a kalendář: Dávkové přidání kontaktů z vybraných e-mailů  /  Rozdělit skupinu kontaktů na jednotlivé skupiny  /  Odeberte připomenutí narozenin ...

Přes 100 Vlastnosti Očekávejte svůj průzkum! Kliknutím sem zobrazíte další informace.

Více       Stažení zdarma      Nákup
 

 

Comments (22)
No ratings yet. Be the first to rate!
This comment was minimized by the moderator on the site
Kan deze script ook gemaakt worden voor het verzenden van emails, dat je dan automatisch de bijlage kan laten afdrukken ?
This comment was minimized by the moderator on the site
Hello, thank you very much for the scripts, very useful indeed!
What if we wanted to print all attachments in an email in Outlook 365 web instead? Are there ways to try this?
This comment was minimized by the moderator on the site
Hi is there a way to print the email body including sender details and subject line in the script please. I pretty much need email and attachment printed out please.
This comment was minimized by the moderator on the site
Hi Mani,

If you want to print an email body including sender details and subject line, I suggest you try the Advanced Print feature of Kutools for Outlook. It can help you solve the problem easily.
https://www.extendoffice.com/images/stories/comments/comment-picture-zxm/advanced-print.png?1696644946
This comment was minimized by the moderator on the site
First of all, thanks a lot for these useful VBA scripts!
My situation is as follows: I usually receive a number of emails with 2 pdf files each. One pdf file, let's call it example1.pdf, needs to be printed only once, but the second pdf file, let's call it example2.pdf, needs to be printed 3 times. The example2.pdf does not necessarily always have the same name, but there are only around 2-4 name variants, so if it were possible to tell the script to look out for a few keywords I think it would work. Is this possible?
Oh, and would it be possible to also tell the script to print the example1.pdf file as duplex?
Thanks for your help.
This comment was minimized by the moderator on the site
Hi There, thanks for publishing this

I have followed the instructions above and are running the script to print all attachments delivered.

we typically receive these in batches of 5-8 and when testing i am getting 4 out of 5 prints with one failing with error 75. All PDF's have different names and are on separate emails/ the attachements can be opened manually fine so i assume theres an issue when it tries to copy this to the temp directory. Do you have any idea how we can resolve this?
This comment was minimized by the moderator on the site
Same problem here. After a couple of emails received during a short time, it can print 3-4 pdf, but after the error 75 appear, nothing print in the same batch of mails.
This comment was minimized by the moderator on the site
Hi Gabriel,
After testing, we have reproduced the problem you encountered. the VBA scripts have been updated in the post. Please give them a try. Thanks for your feedback.
This comment was minimized by the moderator on the site
Love this script! How about if I get an email with multiple pdfs and want one copy of each. Currently when I get 3 pdf's attached, it prints the final one, 3 times, and the other 2 do not get printed. Thanks for any help!
This comment was minimized by the moderator on the site
Hi val,

Sorry for the inconvenience.
Which VBA code are you applying? VBA code 1 or VBA code 2? Do the three PDF attachments have the same name? And which Outlook version are you using?
I have tested the codes and they worked well in my case. I need to know more specific about your issue.
This comment was minimized by the moderator on the site
Is it possible to specify the printer that should be used (not the system default printer)?
I need to print 2 types of documents on 2 different printers....
Thanks for your help!
This comment was minimized by the moderator on the site
Hi Simon,
Thank you for your comment. After trying with various methods, I can't seem to get this to work. Sorry for the inconvenience.
This comment was minimized by the moderator on the site
Hello, kindly I need help, I can't integrate the script for printing pdf only.
I activated everything, the first script for generic printing works perfectly (or almost: printing pdf attachments once printed acrobat reader remains open in the background), but the specific script for pdf does not work. Thanks for posting the scripts and for any help.
Good day
This comment was minimized by the moderator on the site
Hi Marco041,
There was something wrong with the code and it has been updated. Please give it a try.
Note: we have no way to prevent Acrobat Reader from being opened because we need to use it to open the pdf document for the next print job.
Thank you for your feedback.
Sub AttachementAutoPrint(Item As Outlook.MailItem)
'Updated by Extendoffice 20220920
  Dim xFS As FileSystemObject
  Dim xTempFolder As String
  Dim xAtt As Attachment
  Dim xShell As Object
  Dim xFolder As Object, xFolderItem As Object
  Dim xFileType As String, xFileName As String
  On Error GoTo xError
  Set xFS = New FileSystemObject
  xTempFolder = xFS.GetSpecialFolder(TemporaryFolder)
  xTempFolder = xTempFolder & "\ATMP" & Format(Now, "yyyymmddhhmmss")
  MkDir (xTempFolder)
  'Set Item = Application.ActiveExplorer.Selection.Item(1)
  Set xShell = CreateObject("Shell.Application")
  Set xFolder = xShell.NameSpace(0)
  For Each xAtt In Item.Attachments
    xFileName = xAtt.FileName
    xFileType = LCase$(Right$(xFileName, VBA.Len(xFileName) - VBA.InStrRev(xFileName, ".")))
    xFileName = xTempFolder & "\" & xFileName
    xAtt.SaveAsFile (xFileName)
    Select Case xFileType
      Case "pdf"   'change "pdf" to the file extension you want to print
        Set xFolderItem = xFolder.ParseName(xFileName)
        xFolderItem.InvokeVerbEx ("print")
    End Select
  Next xAtt
'xFS.DeleteFolder (xTempFolder)
Set xFS = Nothing
Set xFolder = Nothing
Set xFolderItem = Nothing
Set xShell = Nothing
xError:
  If Err <> 0 Then
    MsgBox Err.Number & " - " & Err.Description, , "Kutools for Outlook"
    Err.Clear
  End If
Exit Sub
End Sub
This comment was minimized by the moderator on the site
Bonjour question pour vous j'ai fait les étapes pour cela mais dans les règle de message de mon outlook je ne voit pas que je peux utilisé un script
This comment was minimized by the moderator on the site
Hi STEPHANE CADORETTE,
If the “run a script” option is missing in your Rules Wizard, you can display it by following the method mentioned in this article: restore missing Run A Script pption in Outlook rule.
This comment was minimized by the moderator on the site
Bonjour moi j'ai un petit soucie lorsque j'ai fait et refait les étapes mais lorsque je créer ma règle je n'Ai pas l'option run a script.
This comment was minimized by the moderator on the site
Hi Stéphane,
If the “run a script” option is missing in your Rules Wizard, you can display it by following the method mentioned in this article: restore missing Run A Script pption in Outlook rule.
There are no comments posted here yet
Load More
Please leave your comments in English
Posting as Guest
×
Rate this post:
0   Characters
Suggested Locations