Virtuele e-mail counter?
Virtuele e-mail counter?
Iemand hier die misschien weet hoe ik een "virtuele" e-mail counter (of hoe het ook mag heten) kan maken?
Ik wil graag in HomeSeer aan bv code E20 een tellertje hangen dat laat zien hoeveel e-mail er in mijn pop3 inbox zit.
--
Never start anything you can't fi
Ik wil graag in HomeSeer aan bv code E20 een tellertje hangen dat laat zien hoeveel e-mail er in mijn pop3 inbox zit.
--
Never start anything you can't fi
Virtuele e-mail counter?
Hoi Noel,
Ik gebruik het pakket van Jon00
POP3 Email package for Homeseer
hiermee kan je een teller aansturen
voor elk email account krijg je een device.
Je kunt ook triggeren via email.
Een veelzijdige plugin
Ed
Ik gebruik het pakket van Jon00
POP3 Email package for Homeseer
hiermee kan je een teller aansturen
voor elk email account krijg je een device.
Je kunt ook triggeren via email.
Een veelzijdige plugin
Ed
Virtuele e-mail counter?
Ed. Bedankt voor de info.
Ik ga gelijk even zoeken en testen.
--
Never start anything you can't fi
Ik ga gelijk even zoeken en testen.
--
Never start anything you can't fi
Re: Virtuele e-mail counter?
Hi,
Zit al een uur te Google-en en raak gefrustreerd dat ik niets kan vinden voor Apple mail (iCloud/Me.com) Deze heeft geen POP3 ondersteuning(alleen IMAP), maar ik wil wel simpel een counter van het aantal mails (liefst inclusief de ongelezen mails). Alle hulp is welkom....
Thanks,
Rien
Zit al een uur te Google-en en raak gefrustreerd dat ik niets kan vinden voor Apple mail (iCloud/Me.com) Deze heeft geen POP3 ondersteuning(alleen IMAP), maar ik wil wel simpel een counter van het aantal mails (liefst inclusief de ongelezen mails). Alle hulp is welkom....
Thanks,
Rien
Rien
Re: Virtuele e-mail counter?
Rien,
Een IMAP client is relatief eenvoudig zelf te programmeren. Bv., om het ongelezen aantal op te vragen doe je een "$ STATUS INBOX (UNSEEN)" en je krijgt het aantal terug. Dat gebruik ik ook op mijn touchscreen. Daarvoor gebruik ik een IMAP VB.Net class die ik ooit ergens gevonden heb en die heb ik hier en daar wat aangepast. Als je denkt daar wat mee te kunnen dan roep maar
Of hier, een willekeurige link over hoe IMAP werkt: http://www.dovecot.org/imap-client-coding-howto.html
Of RFC 3501, http://tools.ietf.org/html/rfc3501
Een IMAP client is relatief eenvoudig zelf te programmeren. Bv., om het ongelezen aantal op te vragen doe je een "$ STATUS INBOX (UNSEEN)" en je krijgt het aantal terug. Dat gebruik ik ook op mijn touchscreen. Daarvoor gebruik ik een IMAP VB.Net class die ik ooit ergens gevonden heb en die heb ik hier en daar wat aangepast. Als je denkt daar wat mee te kunnen dan roep maar
Of hier, een willekeurige link over hoe IMAP werkt: http://www.dovecot.org/imap-client-coding-howto.html
Of RFC 3501, http://tools.ietf.org/html/rfc3501
Re: Virtuele e-mail counter?
Hi Robert,
Nu ben ik niet zo'n programmeur en zelfs eenvoudig is voor mij lastig zonder een goed voorbeeld. Heb wel weer wat gegoogled en wat voorbeelden gevonden, maar krijg ze niet aan de praat.
Zou jij je script met me willen delen, dan kan ik kijken hoe ik hem homeseer geschikt maak.....
Alvast bedankt,
Rien
Nu ben ik niet zo'n programmeur en zelfs eenvoudig is voor mij lastig zonder een goed voorbeeld. Heb wel weer wat gegoogled en wat voorbeelden gevonden, maar krijg ze niet aan de praat.
Zou jij je script met me willen delen, dan kan ik kijken hoe ik hem homeseer geschikt maak.....
Alvast bedankt,
Rien
Rien
Re: Virtuele e-mail counter?
Geen script helaas, maar een class dus.
Zie bijgevoegde IMAP.zip, wat in werkelijkheid IMAP.vb heet, maar is gerenamed i.v.m. forum rules. (unzippen hoeft dus niet!)
Voorbeeld gebruik om ongelezen mail in een label te krijgen:
Of om een grid op het scherm te vullen met info over de laatste x mailtjes:
Succes!
Zie bijgevoegde IMAP.zip, wat in werkelijkheid IMAP.vb heet, maar is gerenamed i.v.m. forum rules. (unzippen hoeft dus niet!)
Voorbeeld gebruik om ongelezen mail in een label te krijgen:
Code: Select all
Private Sub RetrieveUnreadCount(ByVal cUser As String, ByVal cPassword As String, ByVal Label As Label)
Dim IMAPConn As IMAP = New IMAP
Dim MsgCount As Integer
IMAPConn.IMAPConnect("somemailserver.nl", cUser, cPassword)
MsgCount = IMAPConn.GetUnReadMailCount()
IMAPConn.CloseConn()
Label.Text = MsgCount.ToString
End Sub
Code: Select all
Private Sub IMAPUser(ByVal cUser As String, ByVal cPassword As String)
Dim IMAPConn As IMAP = New IMAP
Dim MsgCount As Integer
Dim cFrom As String = ""
Dim cSubject As String = ""
Dim cReceived As String = ""
Me.DataGridView1.Rows.Clear()
IMAPConn.IMAPConnect("somemailserver.nl", cUser, cPassword)
MsgCount = IMAPConn.GetMailCount()
If MsgCount > 0 Then
IMAPConn.SelectInBox()
Dim MinIdx As Integer = IIf(MsgCount - 19 < 1, 1, MsgCount - 19)
Dim MaxIdx As Integer = MsgCount
IMAPConn.FetchHeadersFT(MinIdx, MaxIdx, "from subject date")
Dim RspCounter As Integer = 1
Dim LineCounter As Integer = 1
Dim cLine As String = ""
While LineCounter < IMAPConn.ImapResponse.Count
cLine = IMAPConn.ImapResponse(LineCounter).ToString
WriteDebug(cLine)
If cLine.ToLower.StartsWith("* ") Then
cFrom = ""
cSubject = ""
cReceived = ""
Else
If cLine.ToLower.StartsWith("from:") Then
cFrom = cLine.ToString
cFrom = cFrom.Replace("from:", "").Trim()
cFrom = DecodeB64(cFrom)
Else
If cLine.ToLower.StartsWith("subject:") Then
cSubject = cLine
cSubject = cSubject.Replace("subject:", "").Trim()
cSubject = DecodeB64(cSubject)
If cSubject.Length > 60 Then
cSubject = cSubject.Substring(0, 57) + "..."
End If
Else
If cLine.ToLower.StartsWith("date:") Then
cReceived = cLine
cReceived = cReceived.Replace("date:", "").Trim()
Else
If cLine.ToLower.StartsWith(")") Then
Me.DataGridView1.Rows.Insert(0, cFrom, cSubject, cReceived)
Else
End If
End If
End If
End If
End If
LineCounter += 1
End While
End If
IMAPConn.CloseConn()
Me.DataGridView1.Rows.Item(0).Selected = True
End Sub
Re: Virtuele e-mail counter?
Hi Robert,
Bedankt, maar dit gaat echt te ver voor mij. Krijg het na een uur prutsen niet aan de praat. Ik ga maar eens op het HS forum een berichtje plaatsen.
Maar in elk geval, super bedankt voor de moeite....
Gr,
Rien
Bedankt, maar dit gaat echt te ver voor mij. Krijg het na een uur prutsen niet aan de praat. Ik ga maar eens op het HS forum een berichtje plaatsen.
Maar in elk geval, super bedankt voor de moeite....
Gr,
Rien
Rien
Re: Virtuele e-mail counter?
Graag gedaan hoor. Ach, en wie weet brengt het iemand anders nog op een ideetje
Re: Virtuele e-mail counter?
Een 'no programmeer' oplossing is dus wat je zoekt en wat je krijgt.
Neem een gmail account
Installeer het eerder genoemde Jon00 POP3 Email package for Homeseer pakket
Zet dit op zodat het POP3 berichten van gmail ophaalt
Zet je gmail account op dat het POP3 ondersteunt, incl. je voorkeur settings
bijvoorbeeld wis mailtjes na gelezen te hebben. Dit leegt je mailbox als je een POP3 oproep doet.
Ga nu naar je Apple mail account en laat alles als een copy forwarden naar je gmail account.
Neem een gmail account
Installeer het eerder genoemde Jon00 POP3 Email package for Homeseer pakket
Zet dit op zodat het POP3 berichten van gmail ophaalt
Zet je gmail account op dat het POP3 ondersteunt, incl. je voorkeur settings
bijvoorbeeld wis mailtjes na gelezen te hebben. Dit leegt je mailbox als je een POP3 oproep doet.
Ga nu naar je Apple mail account en laat alles als een copy forwarden naar je gmail account.
Bram
Re: Virtuele e-mail counter?
AshaiRey wrote:Een 'no programmeer' oplossing is dus wat je zoekt en wat je krijgt.
Neem een gmail account
Installeer het eerder genoemde Jon00 POP3 Email package for Homeseer pakket
Zet dit op zodat het POP3 berichten van gmail ophaalt
Zet je gmail account op dat het POP3 ondersteunt, incl. je voorkeur settings
bijvoorbeeld wis mailtjes na gelezen te hebben. Dit leegt je mailbox als je een POP3 oproep doet.
Ga nu naar je Apple mail account en laat alles als een copy forwarden naar je gmail account.
Dit is wel erg omslachtig, maar bedankt voor de tip....
Er zit denk ik nog wel wat tussen deze oplossing en het helemaal zelf programmeren.....
Gr,
Rien
Rien
Re: Virtuele e-mail counter?
Hi,
Heb mijn zoon gevraagd om op basis van de code van Robert, het geschikt te maken voor HomeSeer. Hij studeert Informatica en was met 5 min klaar
Voel me afentoe wel dom, maar goed er zijn nog altijd dingen die ik beter weet of kan (al denkt ie zelf van niet)
Het werkt voor SSL en niet SSL IMAP accounts. Ik moet het nog even wat mooier maken door netjes met variabelen te werken en de overbodige zaken er uit halen, maar dit werkt in ieder geval.
Zie onder.
Gr,
Rien
Heb mijn zoon gevraagd om op basis van de code van Robert, het geschikt te maken voor HomeSeer. Hij studeert Informatica en was met 5 min klaar
Voel me afentoe wel dom, maar goed er zijn nog altijd dingen die ik beter weet of kan (al denkt ie zelf van niet)
Het werkt voor SSL en niet SSL IMAP accounts. Ik moet het nog even wat mooier maken door netjes met variabelen te werken en de overbodige zaken er uit halen, maar dit werkt in ieder geval.
Zie onder.
Gr,
Rien
Code: Select all
Imports System.Text
Imports System.Text.RegularExpressions
Imports System.Net.Security
Public Class IMAPSSL
Public ImapResponse As New Collections.ArrayList
Dim TCP As Net.Sockets.TcpClient
Dim IMAPStream As System.Net.Security.SslStream
Dim inStream As System.IO.StreamReader
Dim strDataIn, strNumMains(2) As String
Dim intNoEmails As Integer
Sub IMAPConnect(ByVal strServer As String, ByVal strUserName As String, ByVal strPassword As String)
TCP = New Net.Sockets.TcpClient
TCP.Connect(strServer, 993)
IMAPStream = New System.Net.Security.SslStream(TCP.GetStream, false)
IMAPStream.AuthenticateAsClient(strServer)
inStream = New System.IO.StreamReader(IMAPStream)
'hs.writelog("IMAP", "Logging in...")
SendData("$ LOGIN " & strUserName + " " & strPassword)
WaitFor("$ OK")
End Sub
Function GetMailCount() As Integer
Try
SendData("$ STATUS INBOX (messages)")
WaitFor("$ OK")
Dim rsp As String = ImapResponse(0).ToString
'hs.writelog("IMAP", "Mailcount response:" & rsp)
Dim RegexObj As Regex = New Regex("[0-9]*[0-9]")
Dim MatchObj As Match = RegexObj.Match(rsp)
'hs.writelog("IMAP", "Match:" & MatchObj.ToString)
Return CInt(MatchObj.ToString)
Catch ex As Exception
hs.writelog("IMAP", "Unexpected Error:" & vbNewLine & ex.Message)
End Try
End Function
Function GetUnReadMailCount() As Integer
Try
SendData("$ STATUS INBOX (UNSEEN)")
WaitFor("$ OK")
Dim rsp As String = ImapResponse(0).ToString
'hs.writelog("IMAP", "Mailcount response:" & rsp)
Dim RegexObj As Regex = New Regex("UNSEEN ([0-9]*[0-9])")
Dim MatchObj As Match = RegexObj.Match(rsp)
'hs.writelog("IMAP", "Match:" & MatchObj.ToString)
Return CInt(MatchObj.ToString.Substring(7))
Catch ex As Exception
hs.writelog("IMAP", "Unexpected Error:" & vbNewLine & ex.Message)
End Try
End Function
Function SelectInBox() As Integer
Try
SendData("$ SELECT INBOX")
WaitFor("$ OK")
Catch ex As Exception
hs.writelog("IMAP", "Unexpected Error:" & vbNewLine & ex.Message)
End Try
End Function
Function FetchHeaders(ByVal i As Integer, ByVal Headers As String) As Integer
Try
SendData("$ FETCH " & i.ToString & " (body[header.fields (" & Headers & ")])")
WaitFor("$ OK")
Catch ex As Exception
hs.writelog("IMAP", "Unexpected Error:" & vbNewLine & ex.Message)
End Try
End Function
Function FetchHeadersFT(ByVal FromNr As Integer, ByVal ToNr As Integer, ByVal Headers As String) As Integer
Try
SendData("$ FETCH " & FromNr.ToString.Trim & ":" & ToNr.ToString.Trim & " (body[header.fields (" & Headers & ")])")
WaitFor("$ OK")
Catch ex As Exception
hs.writelog("IMAP", "Unexpected Error:" & vbNewLine & ex.Message)
End Try
End Function
Public Function WaitFor(ByVal strTarget As String) As Boolean
While True
strDataIn = inStream.ReadLine
ImapResponse.Add(strDataIn)
'hs.writelog("IMAP", strDataIn)
If InStr(strDataIn, strTarget) Then
WaitFor = True
Exit While
Else
WaitFor = False
End If
End While
End Function
Public Function Response() As String
strDataIn = inStream.ReadLine
'hs.writelog("IMAP", strDataIn)
Return strDataIn
End Function
Sub CloseConn()
Try
SendData("$ LOGOUT")
inStream.Close()
IMAPStream.Close()
Catch ex As Exception
hs.writelog("IMAP", ex.Message)
End Try
End Sub
Sub SendData(ByVal strCommand As String)
Dim outBuff As Byte()
'hs.writelog("IMAP", strCommand)
outBuff = ConvertStringToByteArray(strCommand & vbCrLf)
IMAPStream.Write(outBuff, 0, strCommand.Length + 2)
ImapResponse.Clear()
End Sub
Public Shared Function ConvertStringToByteArray(ByVal stringToConvert As String) As Byte()
Return (New System.Text.ASCIIEncoding).GetBytes(stringToConvert)
End Function
End Class
Public Class IMAP
Public ImapResponse As New Collections.ArrayList
Dim TCP As Net.Sockets.TcpClient
Dim IMAPStream As System.IO.Stream
Dim inStream As System.IO.StreamReader
Dim strDataIn, strNumMains(2) As String
Dim intNoEmails As Integer
Sub IMAPConnect(ByVal strServer As String, ByVal strUserName As String, ByVal strPassword As String)
TCP = New Net.Sockets.TcpClient
TCP.Connect(strServer, 143)
IMAPStream = TCP.GetStream
inStream = New System.IO.StreamReader(IMAPStream)
'hs.writelog("IMAP", "Logging in...")
SendData("$ LOGIN " & strUserName + " " & strPassword)
WaitFor("$ OK")
End Sub
Function GetMailCount() As Integer
Try
SendData("$ STATUS INBOX (messages)")
WaitFor("$ OK")
Dim rsp As String = ImapResponse(0).ToString
'hs.writelog("IMAP", "Mailcount response:" & rsp)
Dim RegexObj As Regex = New Regex("[0-9]*[0-9]")
Dim MatchObj As Match = RegexObj.Match(rsp)
'hs.writelog("IMAP", "Match:" & MatchObj.ToString)
Return CInt(MatchObj.ToString)
Catch ex As Exception
hs.writelog("IMAP", "Unexpected Error:" & vbNewLine & ex.Message)
End Try
End Function
Function GetUnReadMailCount() As Integer
Try
SendData("$ STATUS INBOX (UNSEEN)")
WaitFor("$ OK")
Dim rsp As String = ImapResponse(0).ToString
'hs.writelog("IMAP", "Mailcount response:" & rsp)
Dim RegexObj As Regex = New Regex("UNSEEN ([0-9]*[0-9])")
Dim MatchObj As Match = RegexObj.Match(rsp)
'hs.writelog("IMAP", "Match:" & MatchObj.ToString)
Return CInt(MatchObj.ToString.Substring(7))
Catch ex As Exception
hs.writelog("IMAP", "Unexpected Error:" & vbNewLine & ex.Message)
End Try
End Function
Function SelectInBox() As Integer
Try
SendData("$ SELECT INBOX")
WaitFor("$ OK")
Catch ex As Exception
hs.writelog("IMAP", "Unexpected Error:" & vbNewLine & ex.Message)
End Try
End Function
Function FetchHeaders(ByVal i As Integer, ByVal Headers As String) As Integer
Try
SendData("$ FETCH " & i.ToString & " (body[header.fields (" & Headers & ")])")
WaitFor("$ OK")
Catch ex As Exception
hs.writelog("IMAP", "Unexpected Error:" & vbNewLine & ex.Message)
End Try
End Function
Function FetchHeadersFT(ByVal FromNr As Integer, ByVal ToNr As Integer, ByVal Headers As String) As Integer
Try
SendData("$ FETCH " & FromNr.ToString.Trim & ":" & ToNr.ToString.Trim & " (body[header.fields (" & Headers & ")])")
WaitFor("$ OK")
Catch ex As Exception
hs.writelog("IMAP", "Unexpected Error:" & vbNewLine & ex.Message)
End Try
End Function
Public Function WaitFor(ByVal strTarget As String) As Boolean
While True
strDataIn = inStream.ReadLine
ImapResponse.Add(strDataIn)
'hs.writelog("IMAP", strDataIn)
If InStr(strDataIn, strTarget) Then
WaitFor = True
Exit While
Else
WaitFor = False
End If
End While
End Function
Public Function Response() As String
strDataIn = inStream.ReadLine
'hs.writelog("IMAP", strDataIn)
Return strDataIn
End Function
Sub CloseConn()
Try
SendData("$ LOGOUT")
inStream.Close()
IMAPStream.Close()
Catch ex As Exception
hs.writelog("IMAP", ex.Message)
End Try
End Sub
Sub SendData(ByVal strCommand As String)
Dim outBuff As Byte()
'hs.writelog("IMAP", strCommand)
outBuff = ConvertStringToByteArray(strCommand & vbCrLf)
IMAPStream.Write(outBuff, 0, strCommand.Length + 2)
ImapResponse.Clear()
End Sub
Public Shared Function ConvertStringToByteArray(ByVal stringToConvert As String) As Byte()
Return (New System.Text.ASCIIEncoding).GetBytes(stringToConvert)
End Function
End Class
Sub Main(ByVal param As Object)
Dim IMAPConn As IMAPSSL = New IMAPSSL
Dim MsgCount, UnseenMsgCount As Integer
IMAPConn.IMAPConnect("imap.mail.me.com", "Userid", "Password")
UnseenMsgCount = IMAPConn.GetUnReadMailCount()
MsgCount = IMAPConn.GetMailCount()
IMAPConn.CloseConn()
hs.writelog("Check mail", MsgCount.ToString)
hs.writelog("Check UNseen mail", UnseenMsgCount.ToString)
hs.setdevicestring("V41", MsgCount & " (" & UnSeenMsgCount & ")")
Dim IMAPConn2 as IMAP = New IMAP
' Dim MsgCount, UnseenMsgCount As Integer
IMAPConn2.IMAPConnect("imap.strato.com", "Useried", "Password")
UnseenMsgCount = IMAPConn2.GetUnReadMailCount()
MsgCount = IMAPConn2.GetMailCount()
IMAPConn2.CloseConn()
hs.writelog("Check mail", MsgCount.ToString)
hs.writelog("Check UNseen mail", UnseenMsgCount.ToString)
hs.setdevicestring("V40", MsgCount & " (" & UnSeenMsgCount & ")")
End Sub
Rien
Re: Virtuele e-mail counter?
Komisch en mooi dat het toch nog is goedgekomen Rien!
Re: Virtuele e-mail counter?
Bedankt voor het delen.
Ik zie dat het toch niet zo eenvoudig was als men het laat lijken en was het werkelijk slechts 5(0) minuten...
Ik zie dat het toch niet zo eenvoudig was als men het laat lijken en was het werkelijk slechts 5(0) minuten...
Bram