Wysyłanie osobnych wiadomości do adresatów bez „undisclosed recipients”
napisane przez Oskar w dniu środa, 4 Styczeń, 2012, w kategorii Porady - Outlook
Czy nie spotkaliście się z potrzebą adresowania wiadomości osobno. Opcja UDW (ukryte do wiadomości) nie jest wystarczająca, ponieważ odbiorca otrzymuje komunikat: undisclosed-recipients co dyskredytuje was w jego oczach jako twórcę wiadomości kierowanej tylko do jednego odbiorcy (czyli do niego). Między innymi tym można odróżnić Spam od wiadomości dla konkretnego odbiorcy.
Jest na to rada. Poniżej znajduje się procedurę, która wyśle przygotowaną wiadomość do wszystkich odbiorców pojedynczo.
Procedura nie uwzględnia wiadomości, które posiadają w miejscu adresu: listy dystrybucyjnej. Aby przekształcić taką wiadomość należy kliknąć plusik (>= 2007) aby pobrać adresy z listy.

Rys 1. Pobranie adresów z listy w wersji 2007/10
Następnie wywołać poniższą procedurę. Czas realizacji dystrybucji jest wprost proporcjonalny do ilości osób oraz załączników wiadomości. Adresy znajdujące się w polach DW i UDW zostaną przeniesione do pola DO jako jedyny nadawca wiadomości.
Sub Wyslij_osobno() 'MVP OShon from VBATools.pl Const nie$ = "Wiadomość zawiera listę dystrybucyjną." & vbCr & _ "Wysyłanie zostało przerwane!" Const otrzymana$ = "Uruchom procedurę na gotowej do wysłania wiadomości!" Const ja$ = "VBATools.pl" On Error GoTo koniec Dim oMail As MailItem: Set oMail = ActiveInspector.CurrentItem Dim jacy$, x&, newMail As MailItem With oMail.Recipients Dim ile&: ile = .Count If ile > 1 Then For x = ile To 1 Step -1 DoEvents If .item(x).DisplayType = 5 Then GoTo blad Set newMail = oMail.Copy newMail.To = .item(x): newMail.CC = "": newMail.BCC = "" jacy = .item(x) & ";" & jacy newMail.Send 'Display '<-jeśli chcesz zobaczyć przed wysłaniem .Remove (x) Next x oMail.Delete Elseif ile = 1 Then If .item(1).DisplayType = 5 Then GoTo blad jacy = .item(1) oMail.Send Else oMail.Display: MsgBox "Brak adresów!", vbExclamation, ja: Exit Sub End If End With MsgBox "Wygenerowano: " & ile & " wiadomości." & vbCr & _ "Adresaci: " & jacy, vbInformation, ja Set newMail = Nothing Set oMail = Nothing Exit Sub koniec: Select Case Err.Number Case 91: MsgBox otrzymana, vbExclamation, ja Case Else: MsgBox Err.Number & " " & Err.Description, vbExclamation, ja End Select Exit Sub blad: MsgBox nie, vbExclamation, ja If Val(Application.Version) >= 12 Then _ MsgBox "Możesz przy liście dystrybucyjnej plusikiem pobrać adresy z listy " & _ "do pola adresu i ponowić proces nadawania wywołując ponownie procedurę VBA.", _ vbInformation, ja End Sub
Kod powinien znaleźć się w module pliku .OTM i być wywoływany skrótem klawiszowym [Alt+F8] lub dzięki podłączonemu przyciskowi umieszczonego w pasku szybkiego dostępu szablonu nowej wiadomości.
Aby sprawnie korzystać z tej dogodności można dodać procedurę do przycisku dla nowej wiadomości:

Rys 2. Dodanie procedury jako przycisk w menu (nadanie wyglądu i nazwy grupy i przycisku) wg OL 2010

Rys 3. Wygląd przycisku podłączonej procedury
Można go wzbogacić o pasek postępu, tak aby mieć kontrolę nad realizacją wysyłki.

Rys 4. Generowanie wiadomości pojedynczo (i wysłanie ich)
Kod można rozszerzyć o dodanie adresatów wiadomości do treści maila, w przypadku kiedy Massmail będzie nadawał wiadomość do adresata wcześniej osadzonego w polu DW.
W tym celu dodajemy dodatkowe linie:
- pod deklaracją odliczania (Dim Ile&: Ile = .Count):
Dim adresy_DW$: adresy_DW = oMail.CC
- a w pętli przed wysłaniem (newMail.Send):
If InStr(1, newMail.To, adresy_DW) > 0 And Len(adresy_DW) > 0 Then If newMail.HTMLBody <> "" Then newMail.HTMLBody = newMail.HTMLBody & _ "<br><br><b>Adresy na jakich nadano wiadomość:</b><br>" & jacy Else newMail.Body = newMail.Body & vbCrLf & vbCrLf & _ "Adresy na jakich nadano wiadomość:" & vbCrLf & jacy End If End If
Inspiracje podał golly
Innym sposobem na wysłanie wiadomości pojedynczo jest zastosowanie korespondencji seryjnej, narzędzia dostępnego z poziomu MS Word lub zastosowania dodatku do spersonalizowanej wysyłki wiadomości: Generatora maili z indywidualnymi załącznikami dla zdefiniowanych odbiorców.
(c) Shon Oskar – www.VBATools.pl
Wszelkie prawa zastrzeżone. Żadna część ani całość tego artykułu nie może być powielana ani publikowana bez zgody autora.


