I have my script for sending email to some user in Linux. I want to read the string content as HTML in bash, but bash is not able to read string as HTML.
Start of Script:
body ='
Dear $user,
<p> The password for your account is due to expire on in 14 days. and must be changed.<br>
<p>You can reset your password by visiting the Password Reset Portal.</p>
<p>Google </p>
<p>You can contact the XYZ Team in case of any issue. </p>'
#send email
user='ABC'
email="abc#gmail.co."
from="xyz#gmail.com"
echo $body1 | mail -s test -r $from $email
I wanted my message to user will be shown as below and read string as html
Dear ABC,
The password for your account is due to expire on in 14 days. and must be changed.
You can reset your password by visiting the Password Reset Portal.
Google
You can contact the XYZ Team in case of any issue
However bash is reading the body as a string and not as HTML as below
Dear ABC,
<p> The password for your account is due to expire on in 14 days. and must be changed.</p><br>
<p>You can reset your password by visiting the Password Reset Portal.</p>
<p>Google </p>
<p>You can contact the XYZ Team in case of any issue. </p>
Please anyone can help me on this.
I have tried the answers from the link Sending HTML mail using a shell script but i am not succeeded.
The first issue is that mail is a generic name for quite a few different programs (depending on OS and distro), and sometimes mail is a symlink to some other program (eg, mailx). Net result is that it's going to be hard to troubleshoot your issue without a good bit more detail on the program you're using called mail. This in turn can make (semi) portability of scripts a real b*tch (even between hosts in the same domain). For these reasons I tend to use sendmail when I need to do some special formatting on the body of an email.
The second issue is that most mail programs need to be instructed to interpret (html) tags. This typically includes adding (at the top of the email) the clauses MIME-VERSION: 1.0 and Content-Type: text/html.
One simple example you could start with:
body="Dear $user,
<p> The password for your account is due to expire on in 14 days. and must be changed.<br>
<p>You can reset your password by visiting the Password Reset Portal.</p>
<p>Google </p>
<p>You can contact the XYZ Team in case of any issue. </p>"
email="abc#gmail.co."
from="xyz#gmail.com"
echo "Subject: My test subject
To: ${email}
From: ${from}
MIME-Version: 1.0
Content-type: text/html
<html><body>
${body}
</body></html>" | /usr/sbin/sendmail -t
NOTE: Verify the path on your host for sendmail.
NOTE: If you don't have sendmail installed then that's a whole 'nother post since the sysadmin will need to setup a config file to tell sendmail how to process (e)mail messages (eg, what's the name of the smtp server?).
With this basic wrapper you should be able to add more html tags as needed.
Related
We from the the Swiss umbrella association for youth parliaments (DSJ) use TYPO3 as the backbone of our website. Next to TYPO3, we also use the CRM software hitobito, which allows us to create "Abos" with "mailing lists". However, this service is currently not working since Hitobito has recently changed its mail server. I have already changed the server addresses manually in our 365 Admin microsoft account and the changes have been verified by the Hitobito support.
This is where TYPO3 comes into play. The support staff from Hitobito suspects that the mail server configurations must also be changed in TYPO3. I, as a layman, have no clue where to make such changes, however. I was hoping you could help me out here. I believe the following information must be updated in the TYPO3 configuration:
*For the new mail server:
crm.dsj.ch IN MX 10 app.hitobito.ch.
For the outgoing mail server:
crm.dsj.ch 3600 IN TXT "v=spf1 a:mxout.appuio.ch -all*
The information you gave has nothing to do with TYPO3 but is part of the domain record. You should approach your domain registrar (seems to be https://www.visol.ch/ according to whois) with that.
The 1st one is to designate the mail server app.hitobito.ch for all incoming mail to recipients ...#crm.dsj.ch (so-called MX record).
And the 2nd one is to lower the spam level for outgoing mails from senders ...#crm.dsj.ch from the server mxout.appuio.ch (so-called SPF).
Is your webserver supposed to send mails, too? If so and you have problems with receiving these mails, I suggest to use the InstallTool's "test mail" function and send a mail to https://www.mail-tester.com/ - a great tool to identify spam-related problems.
We have set up Odoo 8 as a multi-user helpdesk tool, which creates a new project issue for each incoming mail. Incoming and outgoing servers are configured correctly and system parameters are set to
mail.catchall.domain: company.tld
mail.catchall.alias: helpdesk
mail.bounce.alias: bounce
The problem now is that every time a user comments the mail thread to answer the original issue creator, a new mail is generated with header
FROM: [user]#company.tld
TO: [followers]
REPLY-TO: helpdesk#company.tld
Which is totally fine but leads to a sending failure due to our SMTP configuration. To get around this we want to achieve that all outgoing E-Mails are sent from the same specified address, like helpdesk#company.tld, no matter which user response to the thread.
How do we achieve this?
I had specific issue when I was working on Odoo 8 and I found fix but its not recommended action from developer view, because changing odoo source code is not recommended and changes can be lost.
So what I did was to change email from address to real email from address. Yes it's weird but that's how Odoo works. Odoo is always sending from one specific email address and changes email from to user email address, but if you will look at email carefully you will notice that real sender is always same.
The fix is changing this line
smtp_from = message['Return-Path']
to this line
smtp_from = tools.config.get('email_from')
in openerp/addons/base/ir/ir_mail_server.py file.
PS I don't like this solution.
We are in the process of converting a batch job that processes our bounced emails that we send. We are switching from Redemption to EWS (just upgraded to Exchange 2010 from Exchange 2003). As you know bounced emails come in different forms. I have been able to work through all the test case emails i've got except for the ones that come in the form of:
Your message did not reach some or all of the intended recipients.
Subject: Hello
Sent: 4/01/2012 8:16 AM
The following recipient(s) cannot be reached:
hi#foo.com on 4/01/2012 8:19 AM
The e-mail system was unable to deliver the message, but did not report a specific reason. Check the address and try again. If it still fails, contact your system administrator.
smtp.mydomain.com #5.0.0 smtp; 5.3.0 - Other mail system problem 554-"delivery error: dd This user doesn't have a foo.com account (hi#foo.com) [-5] - mail.foo.com" (delivery attempts: 0)>
This is what is displayed in outlook. When i read the email with EWS the Body is empty. I need to look at the information above when i get the email with EWS. The emails have an attachment (which is the original email) though it doesn't look that way in outlook. I've tried to look at almost all the properties that comes back from EWS and have yet been able to find the text above. Redemption allow you to look at this info using ReportText. What we are specifically looking for is the email error delivery code. We do different things based on this code.
Edit: To be clearer the Body Property on my other test cases isn't empty. I'm loading the emails like:
Dim emailPset = New PropertySet(BasePropertySet.FirstClassProperties)
emailPset.RequestedBodyType = BodyType.Text
Dim f = EmailMessage.Bind(email.Service, email.Id, emailPset)
Update1: After some research it looks like i need to be able to read the Recipients table of the message in the PR_NDR_STATUS_CODE & PR_REPORT_TEXT fields. Still searching if there is a way to do this in EWS.
We were able to get enough info the
smtp.mydomain.com #5.0.0 smtp; 5.3.0 - Other mail system problem 554-"delivery error: dd This user doesn't have a foo.com account (hi#foo.com) [-5] - mail.foo.com" (delivery attempts: 0)>
part which is what we needed by telling the object to load the MIME content.
Definitely not the most straight forward API to use but hopefully we don't hit any more hickups.
Something really weird is going on with boto and Amazon SES. I've tested this at-least 50 times: Sending an email using:
conn = SESConnection(accessKey, secretKey)
conn.send_email(source=fromEmail, subject=subject, body=body, to_addresses=toAddress, cc_addresses=cc_addresses, bcc_addresses=bcc_addresses, format='html', reply_addresses=None, return_path=None)
works as long as the body is regular text. A soon as body contains a link, like "127.0.0.1", the email doesn't go through. send_email doesn't return an error, it just doesn't go through and I can't tell why. The only exception is if the link is the very last piece of text in the body. So, body = "go to 127.0.0.1" will get into the recipients' inboxes, but body = "go to 127.0.0.1 and click on the link" will not work.
Weird, right? What's going on?
EDIT, several wasted hours later:
So after killing several hours on this, I don't know exactly what the problem is, but I know that it doesn't have to do with Boto or Amazon SES. I sent the exact same email to a different address and had no problems with it. Now this is seriously weird and stupid. The email used for my school runs on Google apps and exhibits the wacky behavior described above. My personal email is plain old gmail and doesn't have this issue at all. I even checked the spam folder for my school email and it's not there.
So that's it, the difference between having an "http" and an "https" in the body of the email, and only for certain email accounts. No errors, just a lost email. WTF?
What is the best method to reset a user password when password is hashed:
Reset a password to a random string and send that string to their registered mail?
Create a unique hash link for resetting password which is valid for an hour and sending that link to mail?
Any other method?
Create a unique hash link for resetting password which is valid for an hour and sending that link to mail
This is the method that I prefer. It allows you only to reset the password if and only if the user visits the link. This way, if someone is maliciously trying to reset passwords, the user can simply delete the email and be unaffected (not have to enter a new password).
Also, you should give the reset link some sort of longer expiration date (like 12 to 24 hours).
2 is the best method. Never ever mail a password in plain form. Even better, don't keep it in your system this way. Always have it hashed and salted.
Follow-up to comments: Emailing hashes instead of plain passwords may also be insecure but you are pursuing a different goal through this. Many people use the same password for all sites, from Facebook up to online-banking. A particular hash may get compromized, but not the password itself, which is the point.
#2 is preferable to #1 if only because sending a password in plain text via email exposes it unnecessarily.
Other options are:
use password hint questions
use OpenID and punt the entire problem to the user's OpenID provider.
It depends on the sensitivity of the information you are protecting...
There is a fine balance between security and usability, and you need to decide where it is, and what assets you are protecting.
What I would normally do (assuming to financial data is involved) is option 2, minus the 1 hour limit.
I found a really interesting method on some websites: they are sending you a new password via SMS. This is awesome because the e-mail can be hacked but the phone... I don't think can be easily hacked.