目标:在电子邮件标头中使用唯一的电子邮件地址到:MIME Html消息的字段(请参阅message_class)。如何动态使用哈希值?
File:database.rb在这里,我连接到数据库,我循环表rcpt
表中的行。然后我将该值存储在row["email"]
中。
require 'mysql2'
class Db
def con
@db_host = "localhost"
@db_user = "root"
@db_pass = "password"
@db_name = "table_db"
client = Mysql2::Client.new(:host => @db_host, :unsername => @db_user, :password => @db_pass, :database => @db_name)
rcpt = client.query("SELECT * from rcpt")
rcpt.each do |row|
row["email"]
end
end
end
con
方法的输出继电器而不[ “电子邮件”]:
{"id"=>01, "email"=>"[email protected]"}
{"id"=>02, "email"=>"[email protected]"}
输出con
法[ “电子邮件”]的:
[email protected]
[email protected]
DB模式:
mysql> describe rcpt;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| email | varchar(150) | NO | UNI | NULL | |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
File:message_class.rb这里我创建方法pull_rcpt
然后存储row["email"]
。然后我试图在message
heredoc中使用pull_rcpt
方法。现在出现我的问题:在To:
字段中,我试图传递我当前发送的用户电子邮件地址,因此它应该随接收电子邮件地址而更改。它仍然使用阵列/ Db中第一个联系人的电子邮件地址。我究竟做错了什么?
require 'dkim'
require './database'
class Email
def pull_rcpt
rcpt = Db.new
rcpt.con
end
def data
Dkim::domain = 'example.com'
Dkim::selector = 'mail'
Dkim::private_key = open('/path/to/keys/example.com/mail.private').read
message = <<~MESSAGE
From: Eva <[email protected]>
To: Dani <#{pull_rcpt[0]["email"]}>
MIME-Version: 1.0
Content-Type: text/html
Content-Transfer-Encoding: 8bit
Subject: Test Subject
This is an email message.
<h1>Test</h1>
MESSAGE
end
end
文件:mailer_class.rb在我mailer_class我有rcpt_to
和message
二方法的。 Rcpt_to包含一个数组contacts
,其中包含值row["email"]
。消息构建电子邮件。
require './database'
require './message_class'
def rcpt_to
#conn zu DB & take rcpt
contacts = []
contacts = Db.new
contacts.con
end
def message
#message
message = Email.new
end
几行后一个for loop
内我使用的方法如下:
for rcpt in rcpt_to do
@protocol = { ehlo: "ehlo", mail_from: "[email protected]", rcpt_to: [rcpt["email"]], data: Dkim.sign(message.data) }
end
这里是[email protected]的报头是在数据库中的第二记录:
From: Eva <[email protected]>
To: Dani <[email protected]> <--- This should be example2(value in hash of second entry in database) not example1
MIME-Version: 1.0
Content-Type: text/html
Content-Transfer-Encoding: 8bit
Subject: Test Subject
Content-Length: 40
所以唯一不起作用的是电子邮件标题中的动态To:字段。其余的工作正常,数据库中的所有记录都会收到一封电子邮件。
请提供一个[mcve]。你的例子并不完整(它需要一个数据库,但你没有提供这个方案),它可能不是最小的(我非常怀疑,你需要50行来证明这个问题)。 –
我已经更新了数据库模式。 – Peter
“我做错了什么?” - 这:'#{pull_rcpt [0] [“email”]}'。您明确告诉它始终使用第一行的电子邮件。 –