R: Как мне отформатировать таблицу, которую я показываю в электронном письме, используя sendGrid? - PullRequest
0 голосов
/ 04 марта 2020

Я использую API sendgrid для отправки электронного письма с таблицей в теле письма.

Вот пример кода того, что у меня есть (с использованием набора данных iris). Вывод выглядит как простая неформатированная таблица, и я действительно хотел бы сделать ее более презентабельной (с границами таблицы и пробелами). Любые выводы по этому вопросу будут полезны. Я также новичок в отправке электронных писем с использованием sendGrid, поэтому не стесняйтесь предлагать и другие методы.

require(httr)
require(jsonlite)
key1 <-  #enter your sendGrid API Key here

from.email <- "abc@xyz.com"
to.email <- "xyz@abc.com"
subject <- "IRIS Report"

colNamesDisplay <- paste("\\n", 
                           do.call(paste, purrr::map(colnames(iris), function(colName){

                                    paste("       ", colName)

                             }))
                          )

body <- paste(colNamesDisplay, 
              "\\n-------------------------------------------------------------------- ",
              do.call(paste, purrr::map(1:nrow(iris), function(rowInd){

                  paste("\\n\\n",  

                        do.call(paste, purrr::map(1:ncol(iris), function(colInd){
                            paste("          ", as.character(iris[rowInd, colInd]))
                        })))

                }))
            )

msg <- sprintf('{\"personalizations\":
        [{\"to\": [{\"email\": \"%s\"}]}],
          \"from\": {\"email\": \"%s\"},
          \"subject\": \"%s",
          \"content\": [{\"type\": \"text/plain\",
          \"value\": \"%s\"}]}', to.email, from.email, subject, body)

sendResponse <- POST("https://api.sendgrid.com/v3/mail/send",
                      body = msg, 
                      config = add_headers("Authorization" = sprintf("Bearer %s", key1),
                               "Content-Type" = "application/json"),
                      verbose())

В моей электронной почте я получаю следующую таблицу:

Sepal.Length Sepal.Width Petal .Длина


        5.1            3.5            1.4        

        4.9            3            1.4          

        4.7            3.2            1.3   

Я бы предпочел что-то вроде этого:

https://i.stack.imgur.com/YxgqW.png

1 Ответ

1 голос
/ 04 марта 2020

Вы можете использовать knitr::kable вместе с некоторыми параметрами форматирования в пакете kableExtra, чтобы получить отформатированную таблицу. Например, этот код:

library(knitr)
library(kableExtra)
html <- kable(iris[1:3, 1:3], format = "html") %>% 
  column_spec(1:3, border_right = TRUE, border_left = TRUE) %>%
  row_spec(3, extra_css = "border-bottom: 1px solid") %>%
  kable_styling(full_width = FALSE)
cat(html)

будет напечатан как HTML, который производит эту таблицу:

screenshot

Вы можете играть со стилем, чтобы сделать вещи, если вы хотите. Вероятная главная проблема заключается в том, что, поскольку kable и kableExtra предназначены для работы в R Markdown, вам, возможно, придется проделать определенную работу, чтобы получить дополнительный код CSS и Javascript в вашу электронную почту.

...