Zapis przychodzących maili do formatu txt

Pytania, problemy, uwagi związane ze starszymi wersjami Microsoft Outlook 2003, 2002 (XP), 2000, 98

Moderator: Moderatorzy

Zapis przychodzących maili do formatu txt

Postprzez nowy_1 » Cz 01.11.2007 21:54

Witam
Otrzymuję dużą ilość maili. Osoby wysyłające je do mnie dysponują systemem który nie pozwala na załanczanie załączników. Wymyśliłem więc że wyślę im maila z tabelką a oni będą mi ją odsyłać uzupełnioną. Potrzebuję wyciągnąć z tych maili pewne dane (z tej tabelki). Najlepiej żeby były one zapisywane powiedzmy na dysku (bajka jeśli informacje z tych maili trafiały by do bazy danych). Proszę o pomoc.

P.S. Czy istnieje możliwość aby np te maile automatycznie były zapisywane do pliku txt. ? Może z pliku mógłbym wyciągać potrzebne informacje ?
nowy_1
 
Posty: 12
Dołączył(a): Śr 31.10.2007 07:58

Postprzez OShon » Cz 01.11.2007 23:01

nowy_1 napisał(a):jeśli informacje z tych maili trafiały by do bazy danych

No najlepiej aby wpisywali o 3ba na witrynie www
no ale jak sie nie da...
nowy_1 napisał(a):Czy istnieje możliwość aby np te maile automatycznie były zapisywane do pliku txt

Oczywiście ze jest
pytanie tylko czy mamy do czynienia z 2k czy 2003/7

Potem odpowiednią procedurką można odczytać dane aby trafiły np do Excela. Warunkiem będzie to iż nikt nie będzie mógł zmienić tej "Tabelki" inaczej sie posypie import i export do tabeli (mini bazy)
Obrazek
Oskar Shon - MVP Office Dev. 11/21, 3x MCC, 4/9/22 TechNet
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 10698
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Projekt autorski VBATools.pl

Postprzez OShon » Cz 01.11.2007 23:39

coś widzę że cię nie ma po drugiej stronie ...
ale jak się do tego zabrałem to tak to widzę:

Najlepiej jak by poczta była wysyłana w TXT,
oszczędna w informacje (tylko wymagane dane), ze względu na pojemność pliku do którego będzie to trafiało.

Poczta ma trafiać do gł. folderu "Poczta odbiorcza"
W temacie wiadomości musi być słowo "tabelka"
Plik w jakim będzie wisiały dane to "C:\tresc.txt"
Oczywiście możesz to pozmieniać.
Kod: Zaznacz cały
Private WithEvents oInboxItems As Items

Private Sub Application_Startup()
    On Error Resume Next
    Set TabelkaItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items
End Sub


Private Sub TabelkaItems_ItemAdd(ByVal Item As Object)
    On Error Resume Next
   
    Dim oMail As MailItem, Item
    Set oMail = Item
    If oMail Is Nothing Then Exit Sub 'na wypadek jeśli dostałbyś coś innego niż mail (np zaproszenie na spotkanie)
With oMail
If InStr(1, .Subject, "tabelka") > 0 Then
  Open "C:\tresc.txt" For Append As #1
   Print #1, .SenderEmailAddress
   Print #1, .SenderName
   Print #1, .Body
  Close #1
End If
End With
    Set oMail = Nothing
End Sub


...i to wszystko wstawiasz do ThisOutlookSesion.
Czytanie tego i wpisywanie do Excela to już inny rozdział.

sprawdź i powiedz czy ci działa ;]
Obrazek
Oskar Shon - MVP Office Dev. 11/21, 3x MCC, 4/9/22 TechNet
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 10698
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Projekt autorski VBATools.pl

Re

Postprzez nowy_1 » Pt 02.11.2007 10:38

Cześć dzieki za szybką odpowiedź
Stawiam pierwsze kroki w tym temacie i niestety mam problem z uruchomieniem Twojego makra. Opisze Ci co robiłem to może powiesz mi co było nie tak.
Otwieram:
Narzędzia/ Makro/ Edytor Visual Basic tam Microsoft Office Outlook Object i wstawiam Twoje makro do ThisOutlookSession i zaspisuje. Potem otwieram Outloka i wysyłam sobie maila w temacie wpisując "tabelka". Niestety nie zapisuje mi nic w pliku tresc.txt.

Wracając do problemu to bajką byłoby zapisywanie tego później z pliku tresc.txt do Excella. Gdybyś miał na to pomysł byłbym wdzięczny. Dzięki
nowy_1
 
Posty: 12
Dołączył(a): Śr 31.10.2007 07:58

Postprzez michu » Pt 02.11.2007 10:55

Można zapisywać dane do pliku TXT w formacie CSV - potem będzie można łatwo zaimportować dane do Excel'a.
Pozdrawiam
Michu
michu
 
Posty: 4190
Dołączył(a): N 05.02.2006 17:49
Lokalizacja: Jelenia Góra

Re: Re

Postprzez Shon Oskar » Pt 02.11.2007 11:31

nowy_1 napisał(a):problem z uruchomieniem Twojego makra

Masz ustawione Zabezpieczenia/Makra/Srednie ?

michu napisał(a):Można zapisywać dane do pliku TXT w formacie CSV

Kod: Zaznacz cały
  Open "C:\tresc.txt" For Append As #1
   Print #1, .SenderEmailAddress & ";" & _
                .SenderName & ";" & _
               replace(.Body,";"," ")
  Close #1
O'Shon
Shon Oskar
 
Posty: 182
Dołączył(a): Pn 16.10.2006 09:05
Lokalizacja: Veracomp S.A.

Problem z zapisem do pliku

Postprzez nowy_1 » Pt 02.11.2007 11:44

Zabezpieczenia mam ustawione na średnie. Wogóle nie chce mi zapisac tych maili z tematem "tabelka " do pliku.

Nie wiem czy powienienem stworzyć najpierw taki plik czy jest on tworzony automatycznie, więc sprawdziłam działanie przy utworzonym przezemnie pliku jak i bez niego i nic w obydwu przypadkach mi nie zapisuje.
nowy_1
 
Posty: 12
Dołączył(a): Śr 31.10.2007 07:58

Re: Problem z zapisem do pliku

Postprzez Shon Oskar » Pt 02.11.2007 11:57

nowy_1 napisał(a):Zabezpieczenia mam ustawione na średnie

ok może niedopowiedziałem
Po ingerencji w OutlookThisSession należy zapisać projekt i wyjść z Outlooka (sprawdź czy go nie ma w Trayu - jeśli tak odczekaj 3 sek i jak nie zniknie skiluj)
Jakakolwiek poprawka w tym module wywala z pamięci wszelkie ustalenia - i 3ba robić reboot Outlooka
O'Shon
Shon Oskar
 
Posty: 182
Dołączył(a): Pn 16.10.2006 09:05
Lokalizacja: Veracomp S.A.

:(

Postprzez nowy_1 » Pt 02.11.2007 12:19

Nadal nie wiem w czym tkwi problem. Sorki ale niewiele umiem i być może nie robie jakichś podstawowych rzeczy, które są dla Ciebie oczywiste.

Opisze jak ja to robie:
1. Zapsałem ten projekt
2. Zamknąłem Visual Basic i Outlooka
3. Wszedlem w Panel Steroania i dokonałem przywrcania Microsoft Offica
4. Odpaliłem ponownie Outlooka ( pojawiła mi sie informacja czy chcę uruchomić makra - uruchomiłem je)
5. Wysłałem do siebie maila w temacie wpisując "tabelka"

I niestety nie mam nic zapisane w pliku tresc.txt.
nowy_1
 
Posty: 12
Dołączył(a): Śr 31.10.2007 07:58

Re: :(

Postprzez Shon Oskar » Pt 02.11.2007 12:38

nowy_1 napisał(a):3. Wszedlem w Panel Steroania i dokonałem przywrcania Microsoft Offica

to zbyteczna operacja. Tray to bar po prawej na dole (koło zegarka) jeżli nie ma tam ikonki Outlooka to znaczy ze został on wyłączony. Można też sprawdzić stan uruchamiając Prawy klawisz na Pasku/Menadżer zadań/Procesy Jeśli nie ma tam OUTLOOK.EXE to znaczy że wszystkie jego procesy zostały wyłączone.

ale do rzeczy

zamień deklaracje
Kod: Zaznacz cały
Private WithEvents TabelkaItems As Items

to ta na samej górze przed procedurami

Skoro zapytał cię o to czy uruchomić makra - to ok - znaczy że będzie ładował do pamięci procedurkę TabelkaItems_ItemAdd zaraz po starcie

Pytanie czy wysyłane przez ciebie maile Do siebie nie są przekierowywane regułą do innego folderu niż "Poczta odbiorcza" ?

p.s.
nic nie napisałeś o środowisku
to Outlook: 2000, XP, 2003, 2007 ?

p.s.2
Zrób tą mała poprawkę i sprawdź
Przetestowałem u mnie działa
O'Shon
Shon Oskar
 
Posty: 182
Dołączył(a): Pn 16.10.2006 09:05
Lokalizacja: Veracomp S.A.

Compile error

Postprzez nowy_1 » Pt 02.11.2007 13:10

Mam offica xp. Przy próbie odpalenia wyskoczył mi dłąd:
Duplicate declaration in current scope

Mój kod wygląda teraz tak:


--------------------

Private WithEvents TabelkaItems As Items

Private Sub Application_Startup()
On Error Resume Next
Set TabelkaItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items
End Sub


Private Sub TabelkaItems_ItemAdd(ByVal Item As Object)
On Error Resume Next
Dim oMail As MailItem, Item
Set oMail = Item
If oMail Is Nothing Then Exit Sub 'na wypadek jeśli dostałbyś coś innego niż mail (np zaproszenie na spotkanie)
With oMail
If InStr(1, .Subject, "tabelka") > 0 Then
Open "C:\tresc.txt" For Append As #1
Print #1, .SenderEmailAddress & ";" & _
.SenderName & ";" & _
Replace(.Body, ";", " ")
Close #1

End If
End With
Set oMail = Nothing
End Sub

----------------------


Kompilator czepia się tego fragmentu kodu który wytłuściłem.
nowy_1
 
Posty: 12
Dołączył(a): Śr 31.10.2007 07:58

Postprzez Shon Oskar » Pt 02.11.2007 13:20

ok błąd przy Item - wywal go z deklaracji procedurki TabelkaItems_ItemAdd
Pisałem to częściowo na komórce - dopiero teraz miałem możliwość sprawdzić to na PC'cie ;P

Kod: Zaznacz cały
Private WithEvents TabelkaItems As Items

Private Sub Application_Startup()
On Error Resume Next
Set TabelkaItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items
End Sub


Private Sub TabelkaItems_ItemAdd(ByVal Item As Object)
On Error Resume Next
Dim oMail As MailItem
Set oMail = Item
If oMail Is Nothing Then Exit Sub 'na wypadek jeśli dostałbyś coś innego niż mail (np zaproszenie na spotkanie)
With oMail
If InStr(1, .Subject, "tabelka") > 0 Then
Open "C:\tresc.txt" For Append As #1
   Print #1, "data: " & format(now,"YYYY-MM-DD HH:MM")
   Print #1, "adres: " & .SenderEmailAddress
   Print #1, "osoba: " & .SenderName
   Print #1, "tresc: " & .Body
Close #1

End If
End With
Set oMail = Nothing
End Sub

sie tasiemiec zrobił :roll:

p.s.
osobiście zamiast CSVa zrobił bym import całości body a przy odczycie przygotował warunki jakie będą klasyfikowały dane z tabelki a resztę olewał z maila
O'Shon
Shon Oskar
 
Posty: 182
Dołączył(a): Pn 16.10.2006 09:05
Lokalizacja: Veracomp S.A.

Juppppiiiii

Postprzez nowy_1 » Pt 02.11.2007 13:58

Nie wiem jak mam Ci dziękować teraz wszystko działa. Wielkie dzięki. Miłego weekendu. Pozdrawiam
nowy_1
 
Posty: 12
Dołączył(a): Śr 31.10.2007 07:58

Jeszcze jedno

Postprzez nowy_1 » Pn 05.11.2007 07:44

Witam jeszcze raz

Mam jeszcze 3 pytania związane z Twoim makrem:

1. czy można dodać opcję żeby makro zapisywało do pliku przychodzącego maila jeśli szukane słowo (w naszym przypadku "tabelka") pojawi się ablo w temacie ablbo w treści maila (lub jednocześnie).

2. Jak zrobić aby zapisywał wtedy tylko raz takiego maila a nie za każdym razem jak pojawi się szukane słowo.

3. Czy można wyszukiwać kilka różnych słów kluczowych np "tabelka", "okno", "drzwi"
nowy_1
 
Posty: 12
Dołączył(a): Śr 31.10.2007 07:58

Re: Jeszcze jedno

Postprzez Shon Oskar » Pn 05.11.2007 10:45

nowy_1 napisał(a):pojawi się ablo w temacie ablbo w treści maila (lub
jednocześnie)"

Dobudowujesz następne "Jeżeli"
Kod: Zaznacz cały
If InStr(1, .Body, "tabelka") > 0 Then '...

jednakże nie jest to bezpieczne - bo słowo musi być na pyle unikalne aby nie spływały ci tam śmieci

nowy_1 napisał(a):aby zapisywał wtedy tylko raz takiego maila a nie za każdym razem jak pojawi się szukane słowo.

Kod: Zaznacz cały
If InStr(1, .Body, "tabelka") > 0 and _
InStr(1, .Subject, "tabelka") > 0 Then '...

ale wiedz jak ktoś ci wytnie to słowo z body to .... nie zapisze sie do pliku..

nowy_1 napisał(a):Czy można wyszukiwać kilka różnych słów kluczowych np "tabelka", "okno", "drzwi"

Pewnie. wystarczy rozbudować sobie procedurkę o następne "Jeżeli"
Kod: Zaznacz cały
If InStr(1, .Body, "tabelka") > 0 and _
InStr(1, .Subject, "tabelka") > 0 Then
if InStr(1, .Body, "okno") then procedurka_zapisu_do_pliku_okien
if InStr(1, .Body, "drzwi") then procedurka_zapisu_do_pliku_dzwi
end if

i tak jeśli mail zawiera w temacie Tabelka i w treści tabelka to
jeśli ten mail ma w treści jeszcze drzwi to uruchamiamy procedurkę exportu do pliku dzwi
a jeśli ma w treści okna to export do pliku z okami
inne maile opuszcza
koniec jeśli
O'Shon
Shon Oskar
 
Posty: 182
Dołączył(a): Pn 16.10.2006 09:05
Lokalizacja: Veracomp S.A.

ostatnie pytanie !

Postprzez nowy_1 » Śr 07.11.2007 21:10

Wysyłam maila zawierającego tabelkę do uzupełnienia (zrobiona w excelu i przeklejona do outlooka).


Później otrzymuję tego samego maila od adresata z powrotem z uzupełnionymi pozycjami. Ten mail zapisuje się do pliku dzięki Twojemu skryptowi. Podczas zapisu tej tabelki do pliku txt rozjeżdza się ona i zapis wygląda następująco:

data: 2007-11-06
temat: tabelka
osoba: Adam Nowak
tresc: Zestawienie pracowników w firmie X w miesišcu lipcu















Lp

Imię

Nazwisko

Data urodzenia

Stanowisko



1

Jan

Kowalski

30-01-1971

kierownik



2

Adam

Nowak

21-0801977

zast. Kier.



3

Andrzej

Wojsa

30-09-1961

prac. Fizyczny


Chciałbym aby zapis tej tabelki z maila miał taką postać:

data: 2007-11-06
temat: tabelka
osoba: Adam Nowak
tresc:
Zestawienie pracowników w firmie X w miesišcu lipcu


Lp Imię Nazwisko Data urodzenia Stanowisko
1 Jan Kowalski 30-01-1971 kierownik
2 Adam Nowak 21-08-1977 zast. Kier.
3 Andrzej Wojsa 30-09-1961 prac. Fizyczny


Czyli aby dane z pliku txt nie rozjeżdzały się. Dzięki za pomoc
nowy_1
 
Posty: 12
Dołączył(a): Śr 31.10.2007 07:58

ostatnie pytanie !

Postprzez nowy_1 » Śr 07.11.2007 21:11

Wysyłam maila zawierającego tabelkę do uzupełnienia (zrobiona w excelu i przeklejona do outlooka).


Później otrzymuję tego samego maila od adresata z powrotem z uzupełnionymi pozycjami. Ten mail zapisuje się do pliku dzięki Twojemu skryptowi. Podczas zapisu tej tabelki do pliku txt rozjeżdza się ona i zapis wygląda następująco:

data: 2007-11-06
temat: tabelka
osoba: Adam Nowak
tresc: Zestawienie pracowników w firmie X w miesišcu lipcu















Lp

Imię

Nazwisko

Data urodzenia

Stanowisko



1

Jan

Kowalski

30-01-1971

kierownik



2

Adam

Nowak

21-0801977

zast. Kier.



3

Andrzej

Wojsa

30-09-1961

prac. Fizyczny


Chciałbym aby zapis tej tabelki z maila miał taką postać:

data: 2007-11-06
temat: tabelka
osoba: Adam Nowak
tresc:
Zestawienie pracowników w firmie X w miesišcu lipcu


Lp Imię Nazwisko Data urodzenia Stanowisko
1 Jan Kowalski 30-01-1971 kierownik
2 Adam Nowak 21-08-1977 zast. Kier.
3 Andrzej Wojsa 30-09-1961 prac. Fizyczny


Czyli aby dane z pliku txt nie rozjeżdzały się. Dzięki za pomoc
nowy_1
 
Posty: 12
Dołączył(a): Śr 31.10.2007 07:58

Postprzez OShon » Cz 08.11.2007 02:57

widzę to tak (choć już jest 3cia w nocy i zaraz dostane przez łeb)

Tabelkę wysyłasz w HTMLu aby ludziki powypełniały co 3ba a odbierasz w TXT (ustaw sobie regułę w Outlooku)

Makrełko jaki to będzie czytać w excelu będzie wyglądać następująco:
Kod: Zaznacz cały
Sub czytamy()
Dim x As Long
x = 1

Cells.ClearContents

Dim WierszPobrany As String
Open "C:\Temp\del.txt" For Input As #1
   Do While Not EOF(1)
      Line Input #1, WierszPobrany
      If WierszPobrany = "" Then GoTo dalej
      If InStr(1, WierszPobrany, ":") > 0 Then
        Cells(x, 1) = Split(WierszPobrany, ":")(0): Cells(x, 2) = Trim(Split(WierszPobrany, ":")(1))
      Else
        Cells(x + 1, 1) = Trim(WierszPobrany)
      End If
x = x + 1
dalej:
   Loop
Close #1
End Sub


popraw go sobie tam i tu dopasowując do realiów.
jak by ci z tą konwersją nie wyszło to pisz
Obrazek
Oskar Shon - MVP Office Dev. 11/21, 3x MCC, 4/9/22 TechNet
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 10698
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Projekt autorski VBATools.pl


Powrót do Microsoft Outlook

Kto przegląda forum

Użytkownicy przeglądający ten dział: Majestic-12 [Bot] i 10 gości