Wikipedia:Reference desk/Archives/Computing/2014 May 14

= May 14 =

Hi, alas I set DHCP on my range extender and now I cannot detect its IP
I cannot see it in the clients list of the router, the old static ip is no more valid nor is the default factory ip, even if I press reset.. if a use a brute force ip scanner can I limit the search in 192.168.x.x? Thanx! --Ulisse0 (talk) 07:29, 14 May 2014 (UTC)


 * With nmap:

nmap 192.168.0.1-255 nmap 192.168.1.1-255
 * -- Finlay McWalterᚠTalk 08:03, 14 May 2014 (UTC)
 * This is the strangest cooincidence! I had exactly the same thing happen to me yeaterday. I'm in touch with TPlink support at the moment (though I'm at work, so the proper troubleshooting starts tonight).  I didn't show up on nmap for me (and the syntax above can be concatenated to nmap 192.168.0-1.0-255, unless there's some reason I don't know about to exclude 0 from the final octet). If I work out how to fix it, I'll post the solution here. MChesterMC (talk) 08:45, 14 May 2014 (UTC)
 * Thank you to both, but I meant: can I assume that the ip is in that range? --Ulisse0 (talk) 10:31, 14 May 2014 (UTC)
 * Ah... Good question. I'm not sure if it could be in one of the other ranges of the private address space.  It definitely shouldn't be outside of those ranges, but the larger blocks would take forever to map. I may attempt this tonight if my other troubleshooting fails. MChesterMC (talk) 10:47, 14 May 2014 (UTC)


 * (ec)It's likely that its in one of the private network spaces listed at Private network, and in practice most home routing equipment comes by default set with NAT for 192.168.0.x, 192.168.1,x, or occasionally 10.0.0.x. But I guess (not having one to hand) that an IEEE802.11 range extender is (once it's configured) an ethernet-layer device, so it will spoof the IP address of your gateway both to nmap and to a browser.  How you'll talk to an extender once its in configured mode (when it's trying to be transparent) depends on the extender. For (some) Netgear extenders you connect to http://www.mywifiext.net from a client connected through the extender, and the extender intercepts that and show you its own config screen. If you tell us the make and model of the extender, we can look at the manual. -- Finlay McWalterᚠTalk 10:50, 14 May 2014 (UTC)


 * The manual should also have the extender's reset sequence, which can be more than just pressing reset (sometimes it's a looong hold of reset, or a combination of reset and another button). -- Finlay McWalterᚠTalk 10:51, 14 May 2014 (UTC)
 * Unless I'm misunderstanding something, isn't nmap basically the equivalent of knocking on all the doors of a street (IP addresses) to see if anyone is in (there is a device there), rather than asking people for their address. Why would the extender refuse connections/spoof the address when something addresses it specifically?  Does it still have its own IP as an ethernet layer device? MChesterMC (talk) 11:00, 14 May 2014 (UTC)
 * Once it's set up, its job is to spoof the IP address of the router, so it can be transparent to clients whether they're talking to the real router or an extender (for the same reason, the extender lets you use the same SSID as the router). They could choose for the extender to also have its own IP address (just for its config screen, leased from the router by DHCP), but that doesn't seem to be how manufacturers have done things. TPLink's "magic" address is http://tplinkextender.net/  -- Finlay McWalterᚠTalk 11:04, 14 May 2014 (UTC)
 * I tried the magic address yesterday, no dice (plugged in via cable, so definitely going through the extender) MChesterMC (talk) 12:24, 14 May 2014 (UTC)
 * Mine is a Dlink DWL-2000AP. Alas there's no magic url in the manual...--Ulisse0 (talk) 15:00, 14 May 2014 (UTC)
 * Eventually (after a couple factory resets), I managed to solve it. I'd set the extender with an IP on the wrong subnet, so the computer couldn't see it (the extender had an ip of 192.168.0.123, everything else was on the 192.168.1.* subnet).  Since you can't get there even after a reset, I'm not sure how much this helps though... If you can get at your router config, you may be able to change its DHCP settings so that the subnet it's assigning includes the IP you set for the extender. MChesterMC (talk) 09:03, 16 May 2014 (UTC)

Bizarrity on iPod Touch
I downloaded a picture of a Space Marine because I wanted to draw it today, and saved it in my Camera Roll on my iPod Touch (4 Gen, iOS 6). Now, the picture is just of the Space Marine, and has alpha set to the background (i.e. the area surrounding the figure is transparent). The image is a .png. When I open camera roll on the iPod, it shows thumbnails of all my images, as usual, but the background of the Space Marine displays a photo which I deleted a few weeks ago. When I open the Space Marine pic, that deleted image comes up for a split second as a background, before being replaced with black (with the space Marine over it - the effect I wanted). How do I stop this unwanted 'deleted' pic from appearing, both in camera roll and as split-second background? Is there a disk util that will destroy files when I delete them? KägeTorä - (影虎) (Chin Wag) 11:20, 14 May 2014 (UTC)


 * I don't think the file itself is the problem, but rather whatever buffer it was loaded into when you viewed it. You need to find a way to clear that buffer.  I have something similar happen when I view a PDF file on my PC.  First it displays the last PDF file I viewed, then replaces it with the new one.  Obviously not a good idea, for security reasons, privacy, etc.  If there's no option to clear the buffer, and rebooting or loading other pics doesn't do it, you might try pulling the batteries out (if you can). StuRat (talk) 18:45, 14 May 2014 (UTC)


 * It sounds like there might be an issue with the iPod's display code - but one thing that might help is to note that each pixel in a PNG file is stored as Red/Green/Blue/Alpha - so even when the picture is 100% transparent, there are still RGB values stored for every pixel in the file. If the display code is somehow unable to display alpha-blended images, then whatever was stored in those pixels may very well be there...which is probably what you're seeing in those blank areas.  I'd suggest getting into a paint program of some kind (I use GIMP) and putting the image onto a black background then re-cutting the transparent areas.   This requires a certain amount of technical skill with a paint program - but it may at least make your situation more tolerable. SteveBaker (talk) 20:05, 14 May 2014 (UTC)


 * Thanks to both of you. My issue is not with the new image having that background - I can sort that out in GIMP by giving the .png a background layer in black, for example. My issue is that the deleted photo still remains and is displayed (albeit, as a background to the .png file). @Stu, I have switched it on and off multiple times in the days since the photo was deleted. Also, it is impossible to take out the battery from an iPod Touch (or even self-service practically any Apple product). KägeTorä - (影虎) (Chin Wag) 21:25, 14 May 2014 (UTC)


 * Please file an official bug report: instructions are available online. You may need to sign in to the Developer Program (which you can do at no cost).  Nimur (talk) 02:07, 15 May 2014 (UTC)


 * Yea, I thought that might be the case, that's why I added that "if you can". The Apple crawl was my first experience with Apple not thinking their products would ever need a reboot.  (The "Apple crawl" was crawling under the desk to pull the plug out, on Apple computers which lacked a reset button, but, with portable devices and batteries, they've now eliminated even that possible way to reset the device.) StuRat (talk) 05:07, 15 May 2014 (UTC)

Porting Java to Python
I've been trying to automatically port programs written in Java to Python, and found a package on github which claims to do it. Can someone explain what the $ sign at the beginning of the example code (https://github.com/natural/java2python) means? It's not the cursor that appears in Python (which is >>>) and I'm not sure if the dollar symbol means we have to type the code in Command Prompt. Trying to execute the code without the $ sign doesn't work in Python, so I'm guessing it's meant to be run on some other platform? 117.194.249.57 (talk) 11:38, 14 May 2014 (UTC)


 * Yes, it's the command prompt in their hypothetical bash shell. So they expect you to open a bash window and type everything after the $, but not the $ itself. -- Finlay McWalterᚠTalk 11:48, 14 May 2014 (UTC)

I don't get what a bash window is. >_< Is it the same thing as command prompt (which is basically DOS, I guess) that comes in Windows? 117.194.232.115 (talk) 11:57, 14 May 2014 (UTC)


 * They've written the instructions assuming you're on Linux and using the bash shell. Windows' command prompt is vaguely similar. type on Windows does (some) of what cat does on Linux. -- Finlay McWalterᚠTalk 12:06, 14 May 2014 (UTC)


 * You can ignore the cat line, which is just there to show you the contents of their test file. If, as the example suggests, j2py HelloWorld.java dumps the Python output to the screen instead of to a file, you will need to say j2py HelloWorld.java &gt; HelloWorld.py to redirect it to a file.
 * (The Windows command line syntax is based on the MS-DOS command line syntax, which in turn was heavily influenced by Unix shells, but the Windows command line is not DOS. It's a Windows program.) -- BenRG (talk) 21:03, 14 May 2014 (UTC)

Wifi extender followup - MAC spoofing?
As a related followu to, above, I'm curious as to whether an IEEE802.11 extender spoofs the gateway's MAC address. I'd be grateful if someone with one (in a working condition, naturally) could do this little experiment for me (it's quite safe, you won't grow an extra limb or anything probably ).

To my mind an extender shouldn't need to - a client should purge its ARP cache on making a fresh connection, and thus won't get confused when the router evinces a new MAC. But clients are weird, and network equipment makers find it pays to be paranoid.

So, assuming (e.g.) the gateway is 192.168.0.1, if someone with a wifi laptop did the following, I'd be interested to know the result:


 * 1) stand beside gateway and force new wifi connection
 * 2) ping 192.168.0.1
 * 3) arp -a

This should report the MAC address of the actual gateway. Then go stand right beside the extender, force another reconnect, and ping and arp again. I'd expect that the MACs will be different (and that looked up on a site like http://www.macvendorlookup.com/ they'll correspond to the respective makers of the two pieces of equipment). But I'm curious as to whether this is really going to be the case. -- Finlay McWalterᚠTalk 12:01, 14 May 2014 (UTC)
 * (MChesterMC here, at home and not logged in) Mine shows the MAC address of the router (manufacturer shows as "Sagemcom", and a quick google shows that they make the networking gubbins inside a home hub).  86.149.137.67 (talk) 18:31, 14 May 2014 (UTC)

What makes programs written in one language faster than programs written on another?
Considering that you are using the same machine, and programmers in language A is equally proficient as programmer in language B, and there is no other obvious handicap, like one being dynamically interpreted while the other being compiled. Why would a program in language A be faster? Wouldn't it be more important how the compiler perform? Two compilers working on a language A could produce considerably better or worse code, but why would the language the user chooses be a determinant factor on code speed? OsmanRF34 (talk) 19:13, 14 May 2014 (UTC)
 * Well, in very low level operations, like simple arithmetic and so forth, there should be very little difference - but if your language has high level features, then it may be that they can take advantage of pre-built library code that may be tweaked and optimized to a degree that most programmers wouldn't both with. In other cases, languages may mandate testing that is onerous even when optimised.   So, for example, if you do something super-simple like say "x = myArray [ y ]" in C or C++, you get machinecode that does a simple indexed memory lookup.   But if you write that exact same line of code in (say) Pascal, which has mandatory error checking on array accesses - then it probably compiles to something more like:
 * if ( y < 0 || y >sizeof(myArray) ) error ; else x = myArray [ y ] ;
 * ...which is obviously much less efficient. SteveBaker (talk) 19:43, 14 May 2014 (UTC)
 * Sorry for interrupting here, but most dialects, including Borland Pascal provide means to disable index checks. This turns "mandatory" into "default but optional" (while disregarding the standard). However, the syntax is horrible — they do so in the comments!
 * But yes, as in the above case, range checks can be quite significant; just imagine the<tt> while (*t++ = *s++) ; </tt>meme with full index checks. Matrix operations suffer a lot, too.
 * Complete vs. lazy evaluation is another bottleneck; the Pascal standard requires that if y < 0 evaluated to true, evaluation of y > sizeof(myArray) was still necessary (well, maybe not exactly in this case, because a smart compiler could at least in theory gather that y >sizeof(myArray) had to be false if y < 0 held). That was dropped by Borland Pascal, too (and reintroduced by Microsoft :. - ¡Ouch! (hurt me / more pain) 13:19, 16 May 2014 (UTC)
 * From above  "x = myArray [ y ]" in C or C++, you get machine code that does a simple indexed memory lookup. In modern Pascal and Delphi, if x and y are the same type of arrays, x := y does a very fast copy.  And there are also ways to directly copy x number of bytes from one location to another location - at your own risk, of course (i.e. no checking).  Bubba73 You talkin' to me? 18:37, 16 May 2014 (UTC)
 * In C(++): memcpy, and in Turbo Pascal we used Move. Both asked for a source address, a destination address, and a number of bytes to be copied. There were memset / Fillchar, too, which filled an area with n identical bytes. Unlikely to be in any of the "new" dialects, though. You have to hope that the optimizing compiler finds all the cases where a simple copy operation works. Maybe they do find most of them... - ¡Ouch! (hurt me / more pain) 05:49, 19 May 2014 (UTC)
 * In other cases (C versus C++, for example) you may not be able to optimize the code quite so tightly because of language restrictions - the 'throw...catch' stuff in C++ means that code may be executed out of order.  In a language like BASIC, where all of the code lives in a single source file - then you can optimize the entire program, knowing everything there is to know about it - but in C (for example), there can be functions that are stored in other files that the compiler can't "see" when it's compiling the code that's going to call it.  Hence in BASIC, it may be possible to avoid passing variables on the stack if you know that the function isn't going to change them - but in C, you have no idea what's inside the function - or where else it may be called from.
 * Strongly-typed languages also have an advantage. If you consider a language like C, then a statement like x = y + z ; is simple to compile to a single ADD instruction in machine code - but in JavaScript, y might be an integer and z be a string the first time that code is called - and then z be an integer and y be a string the next time around...the code required to simply add two variables together in JavaScript is horrendous compared to a single ADD instruction in C.  In C++, you can overload 'operator+' to make it appear to the programmer that it works with a mixture of integers and strings, like it does in JavaScript - but the compiler always knows at compile time what the types of x, y and z are - so it can statically choose the correct version of operator+...in JavaScript, the contents of those variables can change in nature each time the code is executed...so additional (complicated) testing is required at runtime.
 * I'm sure there are many other reasons - but these are enough to show that language choice really does impact realtime performance - even if you control for other factors. SteveBaker (talk) 19:43, 14 May 2014 (UTC)


 * Also, a compiled language is normally a lot faster than an Interpreted language. Bubba73 You talkin' to me? 20:21, 14 May 2014 (UTC)
 * The question says that our OP isn't interested in that distinction. SteveBaker (talk) 20:34, 14 May 2014 (UTC)


 * A compiler can only apply an optimizing transformation if it can prove that it doesn't change the meaning of the program. This fails in practice because:
 * It's very likely to be unprovable because it's false. Many real-world programs can be coerced into making out-of-bounds array accesses by pathological inputs, in which case eliminating the bounds checks would change the program's behavior on some inputs.
 * Even if it's true, it's likely to be unprovable given only the contents of one source file.
 * Even if it's true and the compiler has access to all relevant code, proving it is likely to be intractable (probably NP-hard). If you could efficiently determine whether arbitrary Java programs are free of out-of-bounds array accesses on arbitrary inputs, you could make billions.
 * The "efficient languages" are more or less the ones that restrict what you can do at run time to frustrate static analysis. In C at run time,
 * you can't rebind functions → proving correctness of inlining is easy
 * you can't bind the same variable to values of different types → run-time type checks can always be eliminated
 * you can't (on pain of meaninglessness) dereference a null pointer or access an array out of bounds → null-pointer and bounds checks can always be eliminated
 * you can't (on pain of meaninglessness) do arithmetic on ints if the result can't be represented as an int → the compiler can always assume x + 1 &gt; x, which is useful when optimizing loops
 * and so on. -- BenRG (talk) 20:51, 14 May 2014 (UTC)


 * I feel obligated to link to our article on <tt>restrict</tt>. This feature has existed as a language element of FORTRAN for many decades; it has only been added to the C programming language in the last few years.  It is an excellent example of one way that a language can enable or preclude compiler optimizations: the compiler must be able to guarantee correct behavior.  Nimur (talk) 06:02, 15 May 2014 (UTC)

Sending email from a php script.
I have a simple user login feature on one of my websites - and when you create your account (or forget your password), we email you a link to click on to confirm. Nothing at all unusual. However, we get an unreasonably large percentage of our customers (maybe 5 to 10%) who never get our email...like it got stuck in a spam filter or something. I've asked people to check their personal spam folders - and the message doesn't wind up there...but maybe their ISP's trap them first.

We know their "name", their "email" address and we make a hash of their chosen password in "password". The PHP code we use to send the email is pretty simple:

mail($email, "Activate your Renaissance Miniatures Account!",                           "Hello ".$name.",\nWelcome to Renaissance Miniatures! Use the link below to activate your account.\n\n".                            "http://www.renaissanceminiatures.com/webstore/login.php?request=activate&user=".$password."&email=".$email);

In cases where people have complained to me about not getting their confirmation mail, I've been able to check our MySQL records and verified that they did indeed type their email address correctly.

What is tripping these people up? Is there some stupid trick we're missing here? What is an expected failure rate for this kind of communication? SteveBaker (talk) 19:57, 14 May 2014 (UTC)


 * How are you sending this email? If the mail server is on a dynamic IP, spam filters may block it. The solution there would be to send email via a static IP SMTP server, such as those provided by ISPs. Could your mail sever be on a black list? No insult intended, being blacklisted happens sometimes for the wrong reasons. Email authentication tools such as SPF and DKIM can sometimes help to prove there is no email spoofing going on. --Mark viking (talk) 20:56, 14 May 2014 (UTC)


 * It's running on static IP (we use DreamHost). SteveBaker (talk) 00:55, 15 May 2014 (UTC)
 * It seems completely plausible to me that 10% of your recipients use email-services in which the default state for an incoming mail is "spam" unless it arrives from a white-listed, trusted server - i.e., mail only gets through to those users if it's sent from one of a handful of the major well-known internet email providers. Many email providers find this sledgehammer approach to be the easiest type of spam filter to maintain.  Obviously, you and I know that this approach has many shortcomings.  Of course, you and I know that there are plenty of great free software spam filters that would do a much better job than this scheme.  And we know there are free- and commercial- whitelists and blacklists for spam filters that can be kept up to date by diligent system administrators.  But we aren't running the email services for those 10% of your users... "out there" in the wilds of the internet, the administrator of the email server has free reign to make any judgement call they like regarding false-positive rates.  Many users are totally at the mercy of an email server administrator who might be spending very little effort to improve the service quality.  Nimur (talk) 01:50, 15 May 2014 (UTC)


 * So how do other businesses handle this? Just about every place you go to buy stuff online uses an email+password or a name+email+password sign-on system and sends a verification email back to that address to confirm that the real owner of that email account is the person who is signing up for the service.  I find it hard to believe that everyone else is getting failure rates as high as this!


 * If the deal is that they are using well-known email providers and I'm not...would I be better off to send the mail through gmail or something?


 * The problem here is that I don't have access to my customer's email accounts - so I can't dig into it and figure out what's broken. Most people seem to just give up on me before I can ask them enough questions to get to the bottom of it.  But it seems that I can manually send email to these people from the same server as the PHP script does and it arrives intact - so I'm skeptical about my server not being on some needed whitelist.   Is it possible that it's as simple as that some of the wording we chose for the message is tripping up a spam filter?  Are there magic words that we should avoid using?  Maybe sending mail from PHP adds some kind of a field to the message header that identifies it as having been sent by a robot?


 * I can't help feeling that somewhere there is a magic recipe for doing this that works more reliably!
 * SteveBaker (talk) 15:23, 15 May 2014 (UTC)
 * I think, Steve, you're up against the wall here. The big guys - like Google - can spend weeks and dedicate dozens of engineers to tracking down individual ISPs and then they can throw lawyers and marketing goons at the problem until the ISP "resolves the problem independently."  The problem really is on the receiving-side - you're probably doing everything perfectly acceptably.  Even if you add (or remove) a specific mail header in your outbound emails, there is no solution to a white-list policy - except to get your SMTP server added to the aforementioned blacklist.  You, as a small business owner, obviously can't handle the long tail - even if you had the cooperation of each problematic email provider who blocks your mails from reaching its own subscribers, you simply don't have time to debug their lousy spam filters.
 * You very well might have better results getting 100.0% of your out-bound emails through the spam-filters if your automatic email is sent from a GMail address using Google's SMTP server. (This is an unfortunate - and altogether completely ironic - reality of email in Year 2014).  I'd read the terms of use for GMail very carefully: they permit automatic mailings, with caveats.  Of course, Google would rather sell you a service.  A very nice spam-filter you got there, but you'd better be careful there... things break, don't they!  Google can guarantee you that not a single email or armored division will get "done over" - for fifteen bub a week.  Nimur (talk) 16:48, 15 May 2014 (UTC)
 * Reading around the topic, several people say that I need to add "Return-Path:" and "X-Mailer:" fields in the email header because many spam filters reject mail that doesn't have those. PHP's mail function doesn't provide those by default...so that might be my problem.  It's a slightly weird thing to do because you'd think that serious spammers would know that. SteveBaker (talk) 17:25, 15 May 2014 (UTC)
 * According to [//www.zimbra.com/forums/administrators/37498-spamassassin-check-return-path-against-address.html] [//www.zimbra.com/forums/administrators/41349-how-stop-getting-spam-mail-my-own-domain.html] Sender Policy Framework, there may be reasons why the return path and from address being different or simply there being no return-path, is often seen as problematic.
 * It's worth remembering there's a difference between knowing something, and doing something about it. Generally speaking the poorer behaved your server is, the more likely it is to be blocked. While it is obviously possible to forge the return-path, some SMTP servers will prevent this, either overwritting the return-path, adding a second one (which would likely count as an even bigger red flag in spam filters) or even just rejecting a message which already has a return-path. And there being non return-path shouldn't as I understand it, generally happen when Sender Policy Framework is used. And SPF is considered useful in hindering certain spammer practices therefore not having it is often seen as a negative by spam filters. So most major servers must set a return-path. (May be Domain Keys and others use the return-path as well?)
 * <Small>Meanwhile, some servers completely disallow custom or non domain from: addresses suggesting you use the reply-to: address instead (which may not be enough for some use cases). Some including Google's I believe only allow custom from addresses it if you've provided evidence of access to that from address. Some still allow any from address. Particularly now with SPF, I presume whether the second or third, most SMTP server will still set the return-path to be whatever account is used for authentication (and few servers will allow either the second or third and not require authentication). Although as mentioned, this evidentally means some servers will reject is as spam because of the differing from address and return-path.
 * If you use such a SMTP server for spamming, perhaps with botnets and/or illicitly used accounts or mass created free ones, you have no choice but to work with such limitations as best you can for whatever nefarious purpose you're up to, which means accepting some servers will reject such emails but doing your best to avoid it. (So for example, not trying to forge the return-path if it won't work and either using the from address that's the same as the return-path or setting a different one and accepting the rejections, depending on what best suits your dodgy dealings.)
 * Of course when legitimate emails get rejected, it's annoying to all involved but I guess these ISPs have considered the balance to come down in favour of doing whatever they're doing.
 * BTW, Google Apps was actually free for all in the past, albeit with the support and other limitations you may expect from a free service. Unfortunately they slowly reduced this until abandoning it complete near the end of 2012. (For this who signed up when it was free like me, they were grandfathered probably for ever. I suspect the cost to Google to maintaining the free service isn't much since all they really have to do is not charge people and perhaps limit the number of accounts and flag the accounts as free so service people don't worry so much about them.)
 * It seems outlook.com have also ended their free service and with harsher conditions. Ironically less than a year after they finally added IMAP support.
 * And since it wasn't something I was concerned about, I never looked in to either's bulk email policies relating to their free services. Either way unfortunately, that's two major providers who's free service isn't available any more.
 * I don't think Yahoo ever had a free service and even if they do I don't think you'd want to use them considering their legendary security problems. has two other recommendations but they don't sound particularly good.
 * So if making your mail server follow all the quirks and eccentricities recommended to avoid tripping spam filters doesn't help and it's causing sufficient problems for your business, you may unfortunately need to consider either a paid service or using a free service with their domain which allows sufficient bulk emailing for your purpose. As unpalitable as that may be to someone with your experience. While I don't entirely agree with all Nimur has said, I think they are correct that unfortunately the measures some services go try and prevent spam mean things aren't good for people running their own mail server for SOHO like purposes, particularly when sending bulk emails.
 * One recommendation is rather than getting them to handle all your email, you could just look in to a reputable commercial bulk mailer e.g. MailChimp for when you need it. I don't have much experience with such services personally, other than noticing what various Kickstarter projects I've funded have used but I presume the large ones are resonably good at making sure their mails get through (you'd undoutedly need to add them to your SPF records etc) since it's import to their business that this happens. In fact, you may even want to look in to whether any of these offer a free service that may work to you. I'm in no way advocating MailChimp since I no almost nothing about them except they were used by at least one Kickstarter, but they seem to offer sending 12k emails to 2k recepients a month for free.
 * Nil Einne (talk) 13:11, 16 May 2014 (UTC)


 * To be COMPLETELY clear - this isn't "bulk mailing" - I hate that, and we don't do it. This is a situation where a user has decided to create an account on our system - and we collect their email address and send a single mail to a single person so that they can confirm that they really did create the account.  We do this, reluctantly, to ensure that some idiot isn't going around creating accounts under other people's email addresses.  We also use it for "forgot Password" handling and to send receipts when people buy stuff from us.  So the issues of how you send tens, hundreds or thousands of emails out in one go doesn't concern us.


 * We're even sending the confirmation email from our regular outgoing mail address - and we know that "manually created" emails arrive correctly. So the reason that the automatically sent mail is failing to arrive has to be because PHP is sending it - or because something in the wording of our mail is a problem.  Now I'm starting to believe it's only the headers - so I guess the simplest solution is to make the headers generated by PHP be identical to the headers we get from our usual email client.


 * SteveBaker (talk) 23:38, 16 May 2014 (UTC)