목표 : 전자 메일 헤더에 고유 전자 메일 주소 사용 : MIME HTML 메시지의 필드 (message_class 참조).해시 값을 동적으로 사용하는 방법은 무엇입니까?
파일 : database.rb 여기서 데이터베이스에 연결하고 테이블 rcpt
의 행을 반복합니다. 그런 다음 row["email"]
에 값을 저장합니다. 없이 con
방법의
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
OUPUT [ "이메일"] :
{"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에서 사용하려고합니다. 이제 내 문제가 발생합니다 : 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"]
입니다. 메시지가 전자 메일을 작성합니다.
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] 헤더이며 다음과 같이
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
내부 I의 방법을 사용하여
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
이메일 헤더의 동적받는 사람 : 입력란 만 작동하지 않습니다. 나머지는 정상적으로 작동하고 데이터베이스의 모든 레코드는 이메일을 수신합니다.
[mcve]를 제공하십시오. 귀하의 예제가 완전하지 않습니다 (데이터베이스가 필요하지만 구성표를 제공하지 않았습니다) 최소한의 것은 아닙니다 (나는 그 문제를 설명하기 위해 50 줄을 필요로합니다.) –
DB 스키마를 업데이트했습니다. – Peter
"내가 뭘 잘못 했니?" - this :'# {pull_rcpt [0] [ "email"]}'. 항상 첫 번째 행의 전자 메일을 사용하도록 명시 적으로 말합니다. –