You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails5中使用Twilio将接收的短信转发至邮箱的配置及代码实现问题

问题1:Messaging Service下拉无可选选项解决方法

你无需强制选择Messaging Service即可配置webhook,操作如下:

  • 进入目标Twilio虚拟号码的配置页,找到Messaging配置区块
  • 定位「A message comes in」选项,直接选择「Webhook」,填写你的Rails服务公网回调地址,请求方法选择POST即可完成配置
  • 如果你确实需要使用Messaging Service能力,先进入Twilio控制台侧边栏「Messaging > Services」页面,创建新的Messaging Service并绑定你的虚拟号码,完成创建后回到电话号码配置页即可在下拉列表中找到对应选项
问题2:Rails 5 + twilio-ruby 实现短信转发邮件代码方案

前置准备

确保你的Gemfile中已引入依赖:

gem 'twilio-ruby'
# 开发环境可引入letter_opener做邮件本地测试
gem 'letter_opener', group: :development

执行bundle install完成安装。

1. 路由配置

在config/routes.rb中添加回调路由:

Rails.application.routes.draw do
  # 其他原有路由
  post '/twilio/sms_forward', to: 'twilio#sms_forward'
end

Twilio回调请求不会携带Rails默认的CSRF Token,需要跳过对应接口的CSRF校验。

2. 控制器实现

新建app/controllers/twilio_controller.rb:

class TwilioController < ApplicationController
  skip_before_action :verify_authenticity_token, only: [:sms_forward]

  def sms_forward
    # 提取Twilio回调携带的短信参数
    sender_number = params[:From]
    receiver_twilio_number = params[:To]
    sms_content = params[:Body]
    sms_unique_id = params[:SmsSid]

    # 触发邮件发送
    SmsForwardMailer.forward_sms(
      sender_number, 
      receiver_twilio_number, 
      sms_content, 
      sms_unique_id
    ).deliver_now

    # 返回空TwiML响应给Twilio,避免平台回调重试
    twiml_response = Twilio::TwiML::MessagingResponse.new
    render xml: twiml_response.to_s
  end
end

3. 邮件发送类实现

执行生成命令rails g mailer SmsForwardMailer forward_sms,编辑生成的app/mailers/sms_forward_mailer.rb:

class SmsForwardMailer < ApplicationMailer
  # 替换为你配置好的发件邮箱
  default from: 'system@your-domain.com'

  def forward_sms(sender, receiver, content, sms_id)
    @sender = sender
    @receiver = receiver
    @content = content
    @sms_id = sms_id

    # 替换为你要接收转发短信的目标邮箱
    mail(to: 'your-target-email@example.com', subject: "收到来自#{sender}的Twilio短信")
  end
end

4. 邮件内容模板

编辑app/views/sms_forward_mailer/forward_sms.html.erb:

<h2>新Twilio短信提醒</h2>
<ul>
  <li>发送号码:<%= @sender %></li>
  <li>接收Twilio号码:<%= @receiver %></li>
  <li>短信内容:<%= @content %></li>
  <li>短信SID:<%= @sms_id %></li>
</ul>

注意事项

  • 生产环境需要提前配置好Rails的邮件发送服务(如SendGrid、SMTP服务等)
  • 本地测试时可以用ngrok工具将本地3000端口暴露到公网,将生成的公网域名拼接回调路径填入Twilio后台即可完成测试

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:24:04