You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ruby on Rails中如何通过Gmail v1 API添加CSV邮件附件?

解决Ruby on Rails中使用Gmail API发送带CSV附件邮件的问题

嘿,我来帮你搞定这个附件的问题!你的代码里有几个小问题导致附件无法正常添加,咱们一步步修正:

问题分析

你的代码里有两处关键错误:

  • MIME类型错误:你把mime_type设成了'results.csv',这不是标准的MIME类型,CSV文件对应的正确MIME类型是text/csv
  • 附件内容错误:你直接传入了CSV这个类对象,而不是CSV的实际内容(字符串或者文件读取的二进制内容)
  • 另外你给附件命名为shoes.csv,但你说要添加的是results.csv,这里可能是笔误,咱们统一改成results.csv

正确代码示例

情况1:直接生成CSV内容字符串

如果是动态生成CSV内容,先把内容转换成字符串,再添加到附件:

# 先构造CSV内容(示例数据)
csv_content = CSV.generate do |csv|
  csv << ["Name", "Email"]
  csv << ["Alice", "alice@example.com"]
  csv << ["Bob", "bob@example.com"]
end

m = Mail.new(
  to: "to@gmail.com",
  from: "from@gmail.com",
  subject: "Test Subject",
  body: "Test Body"
)

# 正确添加CSV附件
m.attachments['results.csv'] = {
  mime_type: 'text/csv',
  content: csv_content
}

message_object = Google::Apis::GmailV1::Message.new(raw: m.to_s)
service.send_user_message("me", message_object)

情况2:读取本地的results.csv文件

如果是要发送本地已有的CSV文件,直接读取文件内容即可:

m = Mail.new(
  to: "to@gmail.com",
  from: "from@gmail.com",
  subject: "Test Subject",
  body: "Test Body"
)

# 读取本地文件内容添加附件
file_path = Rails.root.join('path/to/results.csv')
m.attachments['results.csv'] = {
  mime_type: 'text/csv',
  content: File.read(file_path)
}

message_object = Google::Apis::GmailV1::Message.new(raw: m.to_s)
service.send_user_message("me", message_object)

补充说明

  • 如果你需要发送二进制附件(比如Excel文件),MIME类型要对应修改,同时内容要读取二进制格式(比如File.binread(file_path)
  • 确保你的service对象已经正确完成了Gmail API的授权,这个你之前已经能发送普通邮件,所以授权部分应该没问题

内容的提问来源于stack exchange,提问作者Shurick

火山引擎 最新活动