Am 10.07.2013 19:38, schrieb dJD col:
> I am trying to send an email using the code below. I am able to send the
> email but I need the code to do the following:
>
> *in the body of the email I need the content of Document.txt which is
> stored in "ms". Right now in the body of the email I send there is "ms"
> and not the content in "ms".
>
> *Also in the subject I want to be able have the values of the variables
> t and y. At the moment the subject of the email sent has t and y and not
> the values.

That's only basic string handling. As Douglas already pointed out,
you should have a look at string interpolation.

Assuming your files are not very big, you might want to avoid working
with file handles and nested blocks for now and just read the complete
files into variables, e.g. with File.read:

   content = File.read('/path/Document.txt')

Generally, you should use better variable names than `y', `t' and
the likes, which would improve readability a lot (same is true for
using correct indentation).

For a clearer structure: first, read all the necessary information
from the files and prepare the different parts of the message,
storing them in `from', `subject', `title', `body', ... variables.

Then, send the message.

BTW: I like the `pony' gem better than `net/smtp' for sending mail.
      It would look something like this:

require 'pony'

# set these only once
Pony.options = {
   :via => :smtp,
   :via_options => {
     :address => 'smtpserver',
     :port    => '587'
   }
}

# do things...

# send an email
Pony.mail(
   :to   => 'you / example.com',
   :from => 'me / example.com',
   :body => content
)


Regards,
Marcus


> #!/usr/bin/env ruby
>
> require 'net/smtp'
>
>     File.open("/home/path/Document.txt","r") do |file|
>     ms=file
>
>       File.open 'email2.txt' do |file|
>       y= file.find { |line| line =~ /San/ }
>       t=y.scan /San: (\w+)/i
>
>       x= file.find { |line| line =~ /verity/ }
>       s=x.scan /verity: (\d+)/i
>
> msgstr = <<EOF
> From: m / example.com
> To: d / example.com
> Subject: t,y
>
> ms
>
> EOF
>
> Net::SMTP.start('serverIP', portnumber) do |smtp|
>      smtp.send_message msgstr,
>                   'm / example.com',
>                   'd / example.com'
>
> end

You are missing some `end' keywords here, aren't you?


-- 
<https://github.com/stomar/>