我正在编写一个函数来向R中的客户发送电子邮件。我使用mailR包这样做,但我的服务提供商只允许我每小时发送100封电子邮件。我想要做的是,如果假设我的电子邮件列表包含270个电子邮件地址,我想将其溢出到chunk1=100 , chunk2 = 100 & chunk3 = 70
然后它应该发送电子邮件到第一个块然后等待一个小时然后chunk2,依此类推。
这是我的功能。
email <- function(dataframe,city,date){
dataframe$registrant_email <- tolower(dataframe$registrant_email)
dataframe_city <- dataframe[dataframe$registrant_city == city & dataframe$create_date == date, ]
# Removing NA's and blank email ids
dataframe_city <- dataframe_city[!(is.na(dataframe_city$registrant_email)|dataframe_city$registrant_email==""), ]
# Removing duplicate email ids
dataframe_city <-dataframe_city[!duplicated(dataframe_city$registrant_email),]
emails <- as.vector(dataframe_city$registrant_email)
if(length(emails) > 100){
# divide the vector into chunks of 100
} else{send_email(emails}
return(emails)
}
我需要if loop
中的帮助如何将拆分部分写入100块,然后调用send_email
函数等待一小时,依此类推。
答案 0 :(得分:2)
您可以将电子邮件矢量拆分为一个包含一行的列表:
mailinglist <- split(emails, ceiling(seq_along(emails)/100))
然后你可以通过以下方式延迟邮件的执行:
for(i in mailinglist) {
send_email(i)
Sys.sleep(3600)}
我通过一个简单的mean()
调用来测试循环并且它有效,但你应该用较短的时间自己测试并通过发送邮件给自己。
编辑:要省略上次迭代的延迟,请使用:
for(i in 1:length(mailinglist)) {
if(i < length(mailinglist)) {
send_email(mailinglist[[i]])
Sys.sleep(3600)}
else {
send_email(mailinglist[[i]])}
}