experiments/generate_email.rb
changeset 15 a38e6916504c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/experiments/generate_email.rb	Fri May 12 11:09:36 2017 -0700
@@ -0,0 +1,76 @@
+#!/usr/bin/env ruby
+#
+# This script delivers a pile-o-test email to a local list.
+#
+# ** The list should first be configured to deliver to an additional
+# Maildir. **
+#
+# After an initial delivery run, you can generate test replies.
+#
+
+require 'mail'
+require 'faker'
+require 'pathname'
+
+abort "Usage: #{$0} send <listaddress> <message count>\n" +
+	"       #{$0} reply </path/to/maildir> <message count>" if ARGV.size < 3
+mode, list, count = ARGV
+
+SENDERS = count.to_i.times.each_with_object( [] ) do |i, acc|
+	acc << "%s %s <%s>" % [
+		Faker::Name.first_name,
+		Faker::Name.last_name,
+		Faker::Internet.safe_email
+	]
+end
+
+SUBJECTS = count.to_i.times.each_with_object( [] ) do |i, acc|
+	intro = if rand(3).zero?
+		"%s %s" % [
+			[ 'Trying to', 'How do I', 'Help -' ].sample,
+			Faker::Hacker.verb
+		]
+	else
+		Faker::Hacker.ingverb.capitalize
+	end
+	acc << "%s %s %s %s%s" % [
+		intro,
+		( rand(2).zero? ? Faker::Hacker.noun : Faker::Hacker.abbreviation ),
+		[ 'for a', 'on', 'on the', 'with some' ].sample,
+		Faker::Hacker.noun,
+		[ '?', '.', '?????'].sample
+	]
+end
+
+Mail.defaults { delivery_method :sendmail }
+
+case mode
+	when 'send'
+		until SENDERS.empty?
+			mail = Mail.new do
+				to      list
+				from    SENDERS.pop
+				subject SUBJECTS.pop
+				body    Faker::Hacker.say_something_smart
+			end
+			mail.deliver
+		end
+
+	when 'reply'
+		maildir = Pathname.new( list ) + 'new'
+		abort "%s doesn't exist." unless maildir.exist?
+
+		count.to_i.times do
+			orig = Mail.read( maildir.children.sample.to_s )
+			mail = Mail.new do
+				to          orig.to
+				from        SENDERS.sample
+				subject     "Re: %s" % [ orig.subject ]
+				body        Faker::Hacker.say_something_smart
+				in_reply_to "<%s>" % [ orig.message_id ]
+				references  "<%s>" % [ orig.message_id ]
+			end
+			mail.deliver
+		end
+end
+