2014-12-30 7 views
5

'pander'및 'sendmailr'패키지를 사용하여 전자 메일 본문에 첨부 파일이 아닌 작은 데이터 프레임을 보내고 있습니다 . 나는 그것을 gmail 계정으로 보내고 싶습니다.열 너비가 sendmailr을 사용하여 R에서 보낸 pander 테이블의 테이블 데이터와 일치하지 않음

저는 닫았지만 열 머리글은 전자 메일 본문의 열 자체와 Rstudio에서와 같이 정렬되지 않습니다. 기본적으로 열 머리글은 너무 커서 그 아래의 데이터 열과 일렬로 정렬 할 수 없습니다 .

대시 및 공백이 다양한 이메일 클라이언트에서 압축되는 방식으로 문제가있는 것으로 보입니다. 웹 및 OS X Mavericks와 함께 제공되는 이메일 클라이언트를 통해 Gmail, Yahoo 및 Hotmail에서이 방법을 시도했습니다. OS X 전자 메일 클라이언트에서 '환경 설정'으로 이동하여 '일반 텍스트 메시지에 고정 너비 글꼴 사용'이라는 상자를 선택하여 문제를 해결할 수 있었지만 여러 장치에서 작업하고 싶습니다. 클라이언트, 등등 내 동료의 많은 그래서 글로벌 이메일 설정을 포함하지 않는 방법이 있는지 궁금하네요. 여기

문제 재현하는 코드 :

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 
) 

...를 수신 한 이메일은 상기 한 문제가있다.

다음으로는 문제를 보여주는 이미지를 볼 수 있습니다

Described problem

+0

이미지 링크를 남길 수 있으며 추가 할 수 있습니다. – Werner

+0

감사합니다. @Werner! http://i.stack.imgur.com/pM98F.png – Eric

답변

6

의 문제를 일반 텍스트 이메일과 인하 테이블을 사용하면 전자 메일 클라이언트는 일반적으로 비와 텍스트를 표시한다는 것입니다 고정 된 글꼴을 사용하고 모든 전자 메일 클라이언트에서 사용자 지정 설정을 사용하여이를 덮어 써야합니다 (예 : OS X 전자 메일 클라이언트 에서처럼). HTML 메일이 :) 추세된다

는 그래서는 HTML 메일을 만들 수 있도록하고 pre 블록의 가격 인하 테이블이 포함 왜 반면에, 그건 : 인해 sendmailR의 버그로

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>')) 

을, 우리는에 있습니다 HTML로 Content-type 오버라이드 (override) :

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

을 그리고 지금은 결과, 당신은 당신의 예에서 사용 된 주석을 통해 전송 될 준비가 :

Pander markdown table in HTML mail

테이블은 다른 HTML 가능 전자 메일 클라이언트에서도 비슷하게 잘 보입니다. 이 방법을 사용하면 귀하의 요구에 더 잘 맞으면 마크 다운 대신 HTML 표를 사용할 수도 있습니다.

+0

고마워! 이것은 훌륭하게 작동했습니다. – Eric