2014-12-30 8 views
5

Ich arbeite mit den Paketen "pander" und "sendmailr", um einen kleinen Datenrahmen im Text einer E-Mail und nicht als Anhang zu senden . Ich möchte es von und zu einem Google Mail-Konto senden.Spaltenbreiten, die nicht mit Tabellendaten in Pander-Tabellen von R mit sendmailr übereinstimmen

Ich bin in der Nähe, aber die Spaltenüberschriften werden nicht mit den Spalten selbst im E-Mail-Körper ausgerichtet, wie sie es zum Beispiel in Rstudio tun - im Grunde sind die Spaltenüberschriften zu breit, um sich mit den Datenspalten unter ihnen zu decken .

Es scheint das Problem ist die Art und Weise die Bindestriche und Leerzeichen in verschiedenen E-Mail-Clients komprimiert sind (Ich habe dies in Gmail, Yahoo und Hotmail über das Web und durch den E-Mail-Client, der mit OS X Mavericks geliefert). Ich war in der Lage, das Problem in meinem OS X E-Mail-Client zu beheben, indem ich auf "Einstellungen" gehe und das Kästchen "feste Schrift für Klartext-Nachrichten verwenden" ankreuze, aber ich möchte, dass es auf mehreren Geräten mit mehreren funktioniert Kunden, etc. für viele meiner Mitarbeiter, also frage ich mich, ob es einen Weg gibt, der keine globalen E-Mail-Einstellungen beinhaltet.

Hier ist der Code, das Problem zu reproduzieren:

library(sendmailR) # for emails from R 
library(pander) # for table-formatting that does not require HTML 

results <- head(iris) 
pander(results) # widths look great so far... 
a = pandoc.table.return(results) 
strsplit(a, "\n") # widths still look great... 

panderOptions('table.split.table', Inf) # show all columns on same line 

msg_content <- mime_part(
    pandoc.table.return(results, style = "multiline") 
) 

# I'm using my own gmail address for email_from and email_to 
sendmail(from = email_from, 
     to = email_to, 
     subject = "test", 
     msg = msg_content 
) 

... und die empfangene E-Mail hat das oben beschriebene Problem.

Als nächstes können Sie ein Bild sehen, das das Problem veranschaulicht:

Described problem

+0

Sie können den Bildlink verlassen und wir fügen ihn für Sie hinzu. – Werner

+0

Danke @Werner! http://i.stack.imgur.com/pM98F.png – Eric

Antwort

6

Das Problem mit Klartext-E-Mail und die Verwendung von Tabellen Abschlag ist, dass der E-Mail-Client in die Regel zeigt den Text mit einem nicht -fixed font, und Sie müssen benutzerdefinierte Einstellungen in Ihrem gesamten E-Mail-Client verwenden, um diese zu überschreiben (wie bei Ihrem OS X-E-Mail-Client). Auf der anderen Seite, deshalb HTML-Mails Trending werden :)

also lasst uns eine HTML-Mail erstellen und umfassen die Abschlags-Tabelle in einem pre Block:

msg_content <- mime_part(paste('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 
Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/> 
</head> 
<body><pre>', paste(pander.return(results, style = "multiline"), collapse = '\n'), '</pre></body> 
</html>')) 

Aufgrund eines Fehlers in sendmailR, haben wir überschreiben die Content-type zu HTML:

msg_content[["headers"]][["Content-Type"]] <- "text/html" 

Und es ist nun bereit, über den Kommentar, den Sie in Ihrem Beispiel verwendet werden gesendet, was zu:

Pander markdown table in HTML mail

Die Tabelle sollte in jedem anderen HTML-fähigen E-Mail-Client ähnlich gut aussehen. Bitte beachten Sie, dass Sie auf diese Weise auch HTML-Tabellen anstelle von Markdown verwenden können, wenn dies Ihren Anforderungen besser entspricht.

+0

Danke! Das hat super funktioniert. – Eric

Verwandte Themen